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')
– вы же не забыли точку перед названием класса? 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] ));
getElementById()
– только у document. См. методы Element.document.getElementById('irc_cc')
// словарь bbcode: className
const dict = {
'info': 'info-text',
'admin': 'admin-text',
};
var tds = document.getElementsByTagName("td");
for (let k = 0; k < tds.length; k++) {
let td = tds[k];
if (td.className !== 'posttdMessage') continue;
let s = td.innerHTML;
for(let bb in dict) {
let re_open = new RegExp('\\[' + bb + '\\]', 'ig');
let re_close = new RegExp('\\[/' + bb + '\\]', 'ig');
s = s.replace(re_open, '<div class="' + dict[bb] + '">').replace(re_close, '</div>');
}
td.innerHTML = s;
}
<script>
var str = "один три два три три три";
var words = str.split(" ");
var collect = {};
for (var i = 0; i < words.length; i++) {
// если в словаре еще нет свойства words[i] заводим такое свойство с значением 0
if (!collect[words[i]])
collect[words[i]] = 0;
// увеличиваем счетчик
collect[words[i]]++;
}
// вывод результатов
for(var word in collect)
console.log(word, collect[word]);
</script>
console.log()
идёт в консоль, и на странице ничего не появится:var b = String(a.num);
b.split("");
a = '<span class="new">';
for (var e = 0; e < b.length; e++) a += "<span>" + b.charAt(e) + "</span>";
a += "</span>";
d.find(".new").attr("class", "cur");
d.append(a);
d.find(".cur").fadeOut(100, function() {
c(this).remove()
});
e = 1;
d.find(".new span").each(function() {
c(this).delay(parseInt(150 / b.length) * e++).animate({
top: 0
}, "fast")
})
span
со стилем позиционирования где-то высоко, по очереди дают эффект .animate() снижающий свойство top
до 0.#RS-number .new {
position: absolute;
left: 0;
top: 0;
right: 0;
}
#RS-number .new span {
position: relative;
top: -70px;
}
console.*
умеет UglifyJS с опцией drop_console: true
. const UglifyJSPlugin = require('uglifyjs-webpack-plugin')
...
optimization: {
minimizer: [
new UglifyJSPlugin({
uglifyOptions: {
compress: {
drop_console: true,
}
}
})
]
}