input.value = parseFloat(e.target.value).toFixed(2);
const pos = e.target.selectionStart; // запомнить положение курсора
// magic
e.target.selectionStart = e.target.selectionEnd = pos; // восстановить
const pos = e.target.selectionStart;
let v = parseFloat(e.target.value);
if( isNaN(v)) v = 0;
e.target.value = v.toFixed(2)
e.target.selectionStart = e.target.selectionEnd = pos;
185
, записанное в 16-ричной системе как 0xB9
. e(f)
, ожидающая целочисленный параметр f.push()
, который вставит в конец массива значение. К свойствам и методам объекта можно обращаться и через точку myArray.push()
и в квадратных скобках передав строку с названием свойства или метода: myArray['push']()
shift()
– записанным так же в виде строки в квадратных скобках.e()
с числом 185, увеличенным на 1, т.е. 186. В цикле это число сначала уменьшается на 1, затем оценивается, не стало ли оно равным нулю. Если ещё не стало, то выполняется тело цикла. Т.е. тело цикла выполнится 185 раз: для 185, 184, 183, ... 2 и 1.boundschange
– Событие изменения области просмотра карты (в результате изменения центра или уровня масштабирования).actionend
– Окончание плавного движения карты. jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
"change select submit keydown keypress keyup contextmenu" ).split( " " ),
function( i, name ) {
// Handle event binding
jQuery.fn[ name ] = function( data, fn ) {
return arguments.length > 0 ?
this.on( name, null, data, fn ) :
this.trigger( name );
};
} );
getElementsByClassName()
или элементов с классом turnabout
ещё нет на странице в момент выполнения скрипта – если скрипт засунут в <head>
, например.document.querySelector('.turnabout')
– вы же не забыли точку перед названием класса? C(10,40) * C(3,40)
– на него поделим число благоприятных вариантов. Это выбор 10 выигрышных C(10,40); из 10 надо выбрать 2 попадания C(2,10); из оставшихся 30 надо выбрать 1 промахнувшийся C(1,30) и всех их перемножить. Итого Q(40,10,3,2) = C(10,40) * C(2,10) * C(1,30) / (C(10,40) * C(3,40))
Наверняка можно неплохо сократить что-то.C(N, M) = M! / ( N! * (M-N)! )
var ts0;
function draw(ts) {
// ...
if(!ts0) ts0 = ts;
const dt = ts - ts0; // сколько прошло миллисекунд
// ...
ctx.translate(500, 180 + Math.sin(dt/352)*3);
ctx.rotate( Math.sin(dt/630) / 40 );
Тут помимо поворота ещё по вертикали слегка покачивается. Так же, плавной синусоидой, но с другим периодом, чтобы не выглядело циклично.requestAnimationFrame()
параметром передаётся текущее время, так что можно не заморачиваться с созданием нового объекта Date, а использовать этот параметр.ctx.drawImage(cloud, -350, -250);
с размерами картинки определяется центр, относительно которого получится вращение. Желательно его подобрать так, чтобы они приходился на визуальный центр масс тучи. hideContent( showContent( elements_id[position] ));
hideContent( showContent );
showContent.bind( null, elements_id[position])
null
в качестве контекст this
и elements_id[position]
в качестве первого параметра. Можно было бы назначить эту функцию переменной: var myFunc = showContent.bind( null, elements_id[position]);
callback
.hideContent( showContent.bind( null, elements_id[position] ));
entry: {
polyfills: './src/polyfills.js',
index: './src/index.js'
},
output: {
filename: '[name].bundle.js',
// создаст polyfills.bundle.js и index.bundle.js
<script>
основного бандла, вставить попытку загрузить Метрику и проверку её загрузки. В случае провала загружать полифильный бандл: <script src="https://mc.yandex.ru/metrika/watch.js"></script>
<script>
if( !(Ya in window)) {
var scriptElement = document.createElement('script');
scriptElement.async = false;
scriptElement.src = '/polyfills.bundle.js';
document.head.appendChild(scriptElement);
}
</script>