我正在使用jquery.inview进行特殊滚动时触发事件。如果元素在视口中,则通过添加类来工作。在我的脚本我说以下
var $BG = $('#BG')
$('#BG').bind('inview', function (event, visible)
{
if (visible == true) {
$(this).addClass("inview");
} else {
$(this).removeClass("inview");
}
});
if($BG.hasClass("inview")){
$('#diagonal').css('left',0)
$('#diagonal').css('top',0)
}
但它一次又一次地触发.css事件,但我希望它们只在#BG第一次获得“inview”类时触发。 谢谢特德
答案 0 :(得分:1)
您可以使用jQuery 取消绑定方法取消绑定事件处理程序,或使用一种方法最多处理一次事件。
http://api.jquery.com/category/events/event-handler-attachment/
答案 1 :(得分:1)
您可以添加一些告诉是否已被解雇的var:
var $BG = $('#BG'), firedInView = false;
$BG.bind('inview', function (event, visible) {
if(!firedInView) {
firedInView = true; //set to true and it won't be fired
//do your stuff
}
});
答案 2 :(得分:0)
尝试使用.one()
代替.bind()
:
$('#BG').one('inview',
答案 3 :(得分:0)
我假设您想在#BG不在视线时删除对角线上的样式?
我将其分成两个听众
//If bg does not have class inview, addClass if it is visible
$('body').on('inview', '#BG:not(.inview)', function (event, visible) {
if (visible == true) {
$(this).addClass("inview");
$('#diagonal').css({'left': 0, 'top': 0});
}
});
//If bg does has class inview, removeClass if it is invisible
$('body').on('inview', '#BG.inview', function (event, visible) {
if (visible == false) {
$(this).removeClass("inview");
$('#diagonal').css({'left': 'auto', 'top': 'auto'});
}
});