美文网首页
当元素第一次出现在可视范围内,提示并且只提示一次

当元素第一次出现在可视范围内,提示并且只提示一次

作者: 苦瓜_6 | 来源:发表于2018-04-25 18:09 被阅读0次

问题

当窗口滚动时,判断一个元素是不是出现在窗口可视范围。在元素第一次出现时在控制台打印 true,以后再次出现不做任何处理。

第一种情况:目标元素有多个

预览地址
控制台输出结果:

image.png

当窗口滚动时,这三个目标出现在可视范围内会在控制台打印出它的文本内容和true ,并且不管窗口怎么滚动只打印一次。

JS部分:

$(window).scroll(function () {
    $node.each(function(){  //  用的时候把这里的$node替换成目标就可以了,上面链接里是$('.test')
           if (isVisible($(this)) && ($(this).data('shown')) !== 'true') {
               // 如果元素在窗口可视范围,并且自定义属性shown 的值不为true的时候,说明之前没有出现过,可以打印true
               console.log($(this).text()+':true');
               $(this).data('shown','true') //  元素在窗口可视范围出现后,我们给她加个自定义属性,做个标记
       }
    });

});  //  每次滑动,函数都会执行

function isVisible($node) {  //  判断元素是否在可视范围内
    var $nodePosition = $node.offset().top;
    var $scrollDistance = $(window).scrollTop();
    var $windowHeight = $(window).height();
    if (($nodePosition >= $scrollDistance) && ($nodePosition <= ($scrollDistance + $windowHeight))) {
        return true
    }
    return false
}

看到这个要求的时候,第一反应是这还不简单吗,加个状态锁就行了,可是实际操作并不行。于是就有了下面的第二种情况。

第二种情况: 目标元素只有一个

我们将JS部分改成如下代码,其他代码不变:

$(window).scroll(function () {
    $($('.test')).each(function(){
       if (isVisible($(this))&& shown !== true){
         console.log('true');
         console.log($(this).text()+':true');
         shown = true;  //  元素出现后,上锁
       }
    });

});  //  每次滑动,函数都会执行

var shown = false;  // 状态锁
function isVisible($node) {
    var $nodePosition = $node.offset().top;
    var $scrollDistance = $(window).scrollTop();
    var $windowHeight = $(window).height();
    if (($nodePosition >= $scrollDistance) && ($nodePosition <= ($scrollDistance + $windowHeight))) {
        return true;
    }
    return false;
}

控制台输出结果:

image.png

不管怎么滚动窗口,都只提醒一个元素一次,当对第一个出现的目标元素执行函数后,shown的值就改变了,这个锁就锁上了.....

总结

要想对多个目标元素生效,就得想办法给出现过的元素添加一个她独有的标记,然后通过检查当前元素是否有这个独有的标记来判断她是否出现过。

就酱,如果有人刚好看到这个,刚好有其他的办法,欢迎交流~

相关文章

  • 当元素第一次出现在可视范围内,提示并且只提示一次

    问题 当窗口滚动时,判断一个元素是不是出现在窗口可视范围。在元素第一次出现时在控制台打印 true,以后再次出现不...

  • jquery.form.js文件上传ie9下bug

    文件上传ie下bug Bug描述:在ie9下上传文件,选择不符合格式的文件并且提示错误,第一次选择的时候提示错误...

  • 懒加载

    判断一个元素是否出现在窗口可视范围(浏览器的上边缘和下边缘之间,肉眼可视) 当窗口滚动时,判断一个元素是不是出现在...

  • MultiAutoCompleteTextView

    MultiAutoCompleteTextView通过分词器Tokenizer,可以支持连续提示。即第一次点击提示...

  • iOS 16提示需要启用开发者模式

    iOS升级到16后,真机测试安装APP时,突然提示需要启用开发者模式,如下图: 当第一次遇到这个提示的时候,不要急...

  • IIS无法启动报错配置文件的XML格式不正确如何处理

    当打开IIS管理器,或配置网站时提示 “错误:配置文件的XML格式不正确” 并且提示的是applicationHo...

  • JavaScript之简易留言板

    简易留言板,功能:当发布留言为空,弹出弹框提示用户“请输入内容”;发布留言后,新的留言出现在原留言的上方,并且用来...

  • 懒加载

    如何判断一个元素是否出现在窗口可视范围(浏览器的上边缘和下边缘之间,肉眼可视)。 当窗口滚动时,判断一个元素是不是...

  • 懒加载+木桶布局

    如何判断一个元素是否出现在窗口可视范围(浏览器的上边缘和下边缘之间,肉眼可视)。 当窗口滚动时,判断一个元素是不是...

  • 懒加载

    如何判断一个元素是否出现在窗口可视范围(浏览器的上边缘和下边缘之间,肉眼可视)。 当窗口滚动时,判断一个元素是不是...

网友评论

      本文标题:当元素第一次出现在可视范围内,提示并且只提示一次

      本文链接:https://www.haomeiwen.com/subject/vcvylftx.html