我有一个函数,我想应用于同一个类的几个元素。它是一个滚动页面功能,我需要它只执行一次。所以我把它放在一个包装器里。它有效,但我希望能够只为一个元素添加一个类,并让它对该元素起作用。我尝试迭代元素并使用addClass添加一个唯一的类,并将其各自的索引添加到结尾,但这不起作用。我现在所拥有的只是第一个元素与" split"类。
//EXECUTES ONLY ONCE
function once(fn, context) {
var result;
return function() {
if(fn) {
result = fn.apply(context || this, arguments);
fn = null;
}
return result;
};
}
// Usage
//var split1 = once(function() {
// fadeInText(".split1");
//});
const handlers = $(".split").toArray()
.map(s => ({ el: $(s), show: once(() => fadeInText(s)) }));
$(window).scroll(function() {
for(const {el, show} of handlers) {
if( $(this).scrollTop() + $(window).height() > el.offset().top)
show();
}
});
//SPLITTEXT
var f = ".split",
fadeInText(f);
function fadeInText(l) {
var el = document.querySelector(l);
var split = el.dataset.split;
var text = new SplitText(el, { type: split });
var tl = new TimelineMax({ paused: false });
var splitEls = text[split];
var wrapEls = function wrapEls(els) {
return els.map(function (el) {
return '<span style="display: inline-block">' + el.innerText + '</span>';
});
};
var wrapped = wrapEls(splitEls);
splitEls.forEach(function (el, i) {
el.style.overflow = 'hidden';
el.innerHTML = wrapped[i];
});
var masks = splitEls.map(function (el) {
return el.querySelector('span');
});
tl.staggerFrom(masks, 1.25, { skewY: 4, y: '200%', ease: Expo.easeOut, delay: 0.9 }, 0.1, 'in');
return l;
}
答案 0 :(得分:0)
$('.class').each(function(){ /* 'this' means the element */})
在函数内部,this
的范围限定为迭代中的元素。
答案 1 :(得分:0)
如果你想要一个纯粹的js应用程序,试试这个:
elements = document.querySelectorAll('.class');
elements.forEach((element, key) => {
//your code
})