var rels = [
['#b1', '.isk'],
['#b2', '.cat-all']
];
$(document).ready(function() {
var loop = function loop(i) {
var btn = rels[i][0];
var block = rels[i][1];
$(btn).click(function () {
$(block).toggle('slow');
});
};
for (var i = 0; i < rels.length; i++) {
loop(i);
}
$(document).click(function(event) {
for (var i = 0; i < rels.length; i++) {
var btn = rels[i][0];
var block = rels[i][1];
var $btn = $(btn);
var $block = $(block);
if (
$btn.is(event.target) ||
$block.is(event.target) ||
$btn.has(event.target).length ||
$block.has(event.target).length
) continue;
$block.slideUp('slow');
}
});
});
var rels = [
['#b1', '.isk'],
['#b2', '.cat-all']
];
$(document).ready(function() {
for (let i = 0; i < rels.length; i++) {
const [btn, block] = rels[i];
$(btn).click(function () {
$(block).toggle('slow');
});
}
$(document).on("click", function(event) {
for (let i = 0; i < rels.length; i++) {
const [btn, block] = rels[i];
const $btn = $(btn);
const $block = $(block);
if (
$btn.is(event.target) ||
$block.is(event.target) ||
$btn.has(event.target).length ||
$block.has(event.target).length
) continue;
$block.slideUp('slow');
}
});
});
function mat2_from_mat3(input, exclude_x, exclude_y) {
let out = [
0, 0,
0, 0
];
for (let x = 0; x < 2; x++) {
for (let y = 0; y < 2; y++) {
let xInput = (x < exclude_x) ? x : x + 1;
let yInput = (y < exclude_y) ? y : y + 1;
out[y * 2 + x] = input[yInput * 3 + xInput];
}
}
return out;
}
let myMatrix3x3 = [
11, 12, 13,
21, 22, 23,
31, 32, 33
];
mat2_from_mat3(myMatrix3x3, 0, 1);
// [
// 12, 13,
// 32, 33
// ]
var objA = {
a: '1',
fn: function () { console.log(this); }
}
objA.fn() // this === objA
// пример смены контекста
var objB = {
b: '2'
}
objB.fn = objA.fn;
objB.fn() // this === objB
// пример потери контекста
var fn = objA.fn;
fn() // this === window или undefined// собственная реализация call
Function.prototype.myCall = function(newThis, ...args) {
// метод call работает так:
// fn.call(newThis, arg1, arg2, и тд.)
// вызовет функцию с новымКонтекстом и аргументами
const fn = this;
// особый случай, если newThis нету, тогда
if (newThis === undefined) {
// проверяем strict mode
const isStrict = (function() { return !this; })();
if (isStrict) {
// в строгом просто выполним функцию без конткста
return fn(...args);
}
// в нестрогом режиме контекст установим как window
newThis = window;
}
// если не знаешь что такое Symbol
// то подставь вместо него Math.random()
// key = 'название ключа, которого ещё нет в объекте';
const key = Symbol();
// записываем функцию в поле объекта
newThis[key] = fn;
// и вызываем её
// результат = новыйКонтекст.нашаФункция(аргумент1, арг2, и тд)
const result = newThis[key](...args);
// удаляем ключ, чтобы вернуть объект в изначальный вид
delete newThis[key];
// возвратим результат
return result;
};
// тест для myCall
var getSum = function(b, c) {
return this.a + b + c;
};
console.log(getSum.call({a: 1}, 2, 3) === 6); // true
console.log(getSum.myCall({a: 1}, 2, 3) === 6); // true
// собственная реализация bind
Function.prototype.myBind = function(newThis, ...firstArgs) {
// bind возвращащает новую функцию, которая
// вызовет функцию с новымКонтекстом и аргументами
const fn = this;
return function (...secondArgs) {
return fn.myCall(newThis, ...firstArgs, ...secondArgs);
};
};
// тест для myBind
var obj = {a: 1};
var boundGetSum = getSum.bind(obj, 2);
var myBoundGetSum = getSum.myBind(obj, 2);
console.log(boundGetSum(3) === 6); // true
console.log(myBoundGetSum(3) === 6); // true
$(function() {
$('.hamburger-toggle').click(function(){
$(this).toggleClass('open');
var hamburger = $('.hamburger-menu__list').css('width');
if (hamburger == '0' || hamburger == '0px') {
$('.hamburger-menu__list').css('width', 250);
}
else {
$('.hamburger-menu__list').css('width', 0);
}
});
});$(function () {
$('.hamburger-toggle').click(function () {
var opened = $(this)
.toggleClass('open')
.hasClass('open');
var width = opened ? 250 : 0;
$('.hamburger-menu__list').css('width', width);
});
});
// храним как связаны кнопки и блоки
var rels = [
['#b1', '.isk'],
['#b2', '.cat-all']
];
$(document).ready(function() {
for (let i = 0; i < rels.length; i++) {
const [btn, block] = rels[i];
// при клике на любую кнопку
$(btn).click(function () {
// переключаем связанный блок
$(block).toggle('slow');
// и сворачиваем все другие
for (let j = 0; j < rels.length; j++) {
if (j === i) continue;
const anotherBlock = rels[j][1];
$(anotherBlock).slideUp('slow');
}
// для того чтобы клики по кнопкам не сворачивали блоки
// возвращаем false для предотвращения всплытия события
return false;
});
// для того чтобы клики по блокам не сворачивали их
// возвращаем false для предотвращения всплытия события
$(block).click(function () { return false });
}
// клики по документу сворачивают все блоки,
// кроме тех вспытие которых было прервано
$(document).click(function () {
for (let i = 0; i < rels.length; i++) {
const [, block] = rels[i];
$(block).slideUp('slow');
}
});
}); // конец блока document ready