【发布时间】:2018-03-20 15:00:17
【问题描述】:
我有这个代码:https://pastebin.com/zgJdYhzN Javascript。当滚动功能达到某个点时,它应该淡入文本,虽然这确实有效,但会有几个页面使用它,我想避免创建这个函数的多个实例。如果我可以只创建一个函数并且对于每个具有“.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");
});
var pl = once(function() {
fadeInText(".pl");
});
var pl1 = once(function() {
fadeInText(".pl1");
});
var smallp = once(function() {
fadeInText(".smallp");
});
var smallp1 = once(function() {
fadeInText(".smallp1");
});
var smallp2 = once(function() {
fadeInText(".smallp2");
});
var smallp3 = once(function() {
fadeInText(".smallp3");
});
var head0 = once(function() {
fadeInText(".head0");
});
$(window).scroll(function() {
if( $(this).scrollTop() + $(window).height() > $(".split1").offset().top) {
split1();
}
if( $(this).scrollTop() + $(window).height() > $(".pl").offset().top) {
pl();
}
if( $(this).scrollTop() + $(window).height() > $(".pl1").offset().top) {
pl1();
}
if( $(this).scrollTop() + $(window).height() > $(".smallp").offset().top) {
smallp();
}
if( $(this).scrollTop() + $(window).height() > $(".smallp1").offset().top) {
smallp1();
}
if( $(this).scrollTop() + $(window).height() > $(".smallp2").offset().top) {
smallp2();
}
if( $(this).scrollTop() + $(window).height() > $(".smallp3").offset().top) {
smallp3();
}
if( $(this).scrollTop() + $(window).height() > $(".head0").offset().top) {
head0();
}
});
【问题讨论】:
-
您真的应该将
$(this)、$(window)、$(".split1")、$(".pl")、...存储在滚动处理程序“外部”(或闭包中)的变量中。现在,您在每次调用滚动处理程序时创建 24 个 jQuery 对象(其中 16 个始终相同)。并且该处理程序将被非常经常调用。 -
我在想我可以将它们存储在像 foreach $('class) 这样的循环中,并为它们分配一个带有各自索引的数组。
-
请说明您的要求/问题。在评论中,您说您只想使用一个类 (
.split) 而不是不同的类。那为什么你有不同的功能,每个班级一个?一类,一种功能。这是一个简单的for循环来检查元素...
标签: javascript jquery function animation tween