javascript - 淡入具有特定类的 div 的通用代码,在第一次运行后删除函数

标签 javascript jquery

我正在尝试创建一个通用函数,它可以在我的站点中放置一次并跨多个页面工作,既美观又轻便。

我希望能够使网站上的某些 div 在滚动到它们上方 10 像素时淡入。

我想通过简单地向我的 div 添加以下属性来做到这一点:

.fade-in-block #specific-block-name

我的想法是,我可以浏览该站点,添加此类和一个 ID,然后动画就可以运行了。

除了一件事,我几乎让它正常工作,在调用该函数后,滚动监听不断地继续到 console.log。我不喜欢这样,因为感觉它会不断尝试应用动画,从前端不会真正看到它,但我觉得幕后不断的数学运算可能会减慢速度。

这是我的 jQuery:

$('body .fade-in-block').each(function(){
            var block = '#'+$(this).attr('id');
            console.log('Block class is = '+block);
            var offset = $(block).offset().top;
            var $w = $(window).scroll(function () {
                if ($w.scrollTop() > offset - 10) {
                    console.log('reached block turn-on point for '+block);
                    $(block).removeAttr('id'); // remove the ID from the element so the script doesn't continue to find the element
                    // fade and rise animation here
                }
            });
        });

这是一个 JSFiddle .它工作得很好,但一旦你点击该 block ,你就会看到它不断记录滚动的每个像素。

一旦事件发生,我试图通过从元素中删除选择 id 来解决这个问题,但它继续运行。

最佳答案

滚动和调整大小事件都有这个问题,据说解决方案是debouncing .但是,我从来没有真正去抖动以正常工作。相反,我通常会创建一种开关,一旦滚动条件被激活,它就会关闭。在您的情况下,由于您有多个元素,因此您需要为每个元素分配一个开关。

$(window).on('scroll', function(){
    $('.fade-in-block').each(function(){
        var appear = $(this).attr('data-appeared');
        if(!appear){
            $(this).attr('data-appeared', true);
            //do something to $(this)
        }
    })
})

这里我在数据属性出现后添加它,并在它出现后再次检查它。

关于javascript - 淡入具有特定类的 div 的通用代码,在第一次运行后删除函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33956535/

相关文章:

javascript - AngularJS 摘录函数

javascript - 火狐大纲 :none on input text is not working

用于调用 Namespace 函数的 Javascript Onready 函数

php - 带有进度条的 Ajax/Flash 文件上传?

javascript - 如何使用 jQuery 或 CSS 缩小整个网站?

jquery - 检查href是否有class,如果有,则获取id

javascript - React-Slick Carousel - 禁用键盘箭头

jquery - 如何在 jQuery 中选择特定的表单元素?

javascript - html php 表单将结果存储在文本文件中

javascript - 如何从给定对象以指定方式获取构造对象