let parent = el.closest('.promo');
let copyText = parent.querySelector('.promo-text')
const result = [].indexOf.call(this.children, event.target)
[]
[].indexOf
[].indexOf.call
indexOf()
this.children
, а хочется.[]
и его метод indexOf
call()
(подробнее)indexOf
в качестве this
(где искать) — this.children
,event.target
event.target
среди this.children
-1
, если не нашлось. var m_top = $('.go').offset().top;
запомнит оффсет только для самого первого элемента найденного по селектору, поэтому и обрабатывается только он.$(document).ready(function(){
var observer = new IntersectionObserver(function(entries){
entries.forEach(function(entry){
if(entry.isIntersecting) {
$(entry.target).addClass('active bounceInLeft');
} else {
$(entry.target).removeClass('active bounceInLeft');
}
});
}, {threshold: 0.1});
$('.go').each(function(){
observer.observe(this);
});
});
<video controls preload="none" poster="one-does-not-simply-placeholder.jpg">
<source src="one-does-not-simply.webm" type="video/webm">
<source src="one-does-not-simply.mp4" type="video/mp4">
</video>
forEach
и for...of
. Откройте документацию и разберитесь.forEach
нельзя прервать (throw
не в счёт), в то время как в теле for...of
можно использовать break
и return
.forEach
можно назначать контекст выполнения (через второй параметр, коллбек при этом не должен быть стрелочной функцией).forEach
отложить запуск следующей итерации до окончания выполнения асинхронных операций, запущенных в текущей итерации. В случае for...of
можно добавить async
в объявление функции, внутри которой он находится, и использовать await
.Symbol.iterator
, то это ещё не означает, что и forEach
там тоже присутствует. Впрочем, тут могут быть варианты одолжить чужой forEach
:Array.prototype.forEach.call('ABC', alert);
NodeList.prototype.forEach.call(document.scripts, console.log);
Когда начинал, везде предлагали брать готовое решение, а не изобретать свое чудо...Есть две полярных и при этом правильных точки зрения.
1. Экономия времени. Достаточно написать и после интегрировать в свои проекты..."Достаточно написать" обычно для велосипедов измеряется годами, с учётом всё новых и новых требований и найденных багов.
2. Правильное решение. Соглашусь, но если практиковать свои навыки, разве у вас не получится также?Опять же - речь про годы практики.
function getVideoImage(path, secs, callback) {
var me = this
var video = document.createElement('video');
video.onloadedmetadata = function() {
if ('function' === typeof secs) {
secs = secs(this.duration);
}
this.currentTime = Math.min(Math.max(0, (secs < 0 ? this.duration : 0) + secs), this.duration);
};
video.onseeked = function(e) {
var canvas = document.createElement('canvas');
canvas.height = video.videoHeight;
canvas.width = video.videoWidth;
var ctx = canvas.getContext('2d');
ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
var img = new Image();
img.src = canvas.toDataURL();
callback.call(me, img, this.currentTime, e);
};
video.onerror = function(e) {
callback.call(me, undefined, undefined, e);
};
video.src = path;
}