function cal(y,m) {
let[t,r,d,w,l]=[v=>~~v,[],1,0,y%4],c=(t(23*m/9)+(m<3?y--:y-2)+5+t(y/4)-t(y/100)+t(y/400))%7;
for(;d<29+(62648012+16*!l>>m*2&3);++d,c=++c%7,w+=!c)(r[w]||(r[w]=[,,,,,,,]))[c]=d;return r
}
console.log(cal(2020,8));
[
[ , , , , , , 1 ],
[ 2, 3, 4, 5, 6, 7, 8 ],
[ 9, 10, 11, 12, 13, 14, 15 ],
[ 16, 17, 18, 19, 20, 21, 22 ],
[ 23, 24, 25, 26, 27, 28, 29 ],
[ 30, 31, , , , , ]
]
function cal(y,m) {
let[t,r,d,w,l]=[v=>~~v,[],1,0,y%4],c=(t(23*m/9)+(m<3?y--:y-2)+5+t(y/4)-t(y/100)+t(y/400))%7||7;
for(;d<29+(62648012+16*!l>>m*2&3);++d,c=++c%7||7,w+=!(c-1))(r[w]||(r[w]=[,,,,,,,]))[c-1]=d;return r
}
console.log(cal(2020,8));
[
[ , , , , , 1, 2 ],
[ 3, 4, 5, 6, 7, 8, 9 ],
[ 10, 11, 12, 13, 14, 15, 16 ],
[ 17, 18, 19, 20, 21, 22, 23 ],
[ 24, 25, 26, 27, 28, 29, 30 ],
[ 31, , , , , , ]
]
/** Здесь мы передаём функцию clicker как параметр, не вызывая её */
document.getElementById('A').addEventListener('click', clicker1);
// Функция clicker1() будет вызываться когда нажимаем на кнопку A
function clicker1(event1){
let target1 = event1.target;
// Здесь мы вызываем функцию nonClicker(), которая возвращает функцию clicker2(), которую передаём параметром к addEventListener
document.getElementById('B').addEventListener('click', nonClicker(event1, target1));
}
// Эта функция nonClicker() вызывается не по клику на B, но вызывается по клику на A
function nonClicker(event1,target1){
// Функция clicker2() будет вызываться при клике на кнопку b
return function clicker2(event2){
// В этой функции доступны все три переменные
console.log(event1,event2,target1);
}
}
// Задать элементу opacity можно так
элемент.style.opacity = 0.8;
// Прочитать opacity у элемента так:
if(элемент.style.opacity == 0.8) {
}
// Если нужно посчитать фактический opacity у элемента, то так:
console.log(window.getComputedStyle(элемент).opacity);
/* Устанавливаем все элементы видимыми */
.element1 {
display: block;
}
.element2 {
display: block;
}
.element3 {
display: block;
}
/* Устанавливаем третий блок невидимым при ширине страницы меньше 992px */
@media screen and (max-width: 992px) {
.element1 {
display: block;
}
.element2 {
display: block;
}
.element3 {
display: none;
}
}
/* Устанавливаем второй и третий блоки невидимыми при ширине страницы меньше 600px */
@media screen and (max-width: 600px) {
.element1 {
display: block;
}
.element2 {
display: none;
}
.element3 {
display: none;
}
}
/* Делаем все элементы видимыми, если у элемента есть класс visible */
.element1.visible,
.element2.visible,
.element3.visible, {
display: block;
}
<!-- внутри меню бутерброда делаем ссылки -->
<a href="javascript:document.querySelector('.element1').classList.toggle('visible');">Element1</a>
<a href="javascript:document.querySelector('.element2').classList.toggle('visible');">Element2</a>
<a href="javascript:document.querySelector('.element3').classList.toggle('visible');">Element3</a>
ducment.querySelector('form').addEventListener('submit',(e)=>{
/* Здесь можно читать значения элементов форм */
// с файлами так
let file = document.forms['formName']['avatar'].files[0];
//file.name == "photo.png"
//file.type == "image/png"
//file.size == 300821
// Если нужно остановить отправку формы, надо выполнить эти две строчки
e.preventDefault();
e.stopPropagation();
});
var x = $(".lang-selector")[0].getBoundingClientRect();
console.log(x.top, x.bottom);