首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这是重用JS函数的正确方式吗?

这是重用JS函数的正确方式吗?
EN

Stack Overflow用户
提问于 2016-08-18 21:14:52
回答 1查看 92关注 0票数 1

我写了两个函数,它们工作得很好。如果用户位于页面上的某个部分,一个函数会将HTML video属性autoplay添加到视频DOM元素中。另一个函数将滑入一些具有良好过渡的元素。

但缺点是,它将适用于页面内的一个元素,但我希望它也能在其他元素上工作。

这里有一个函数,可以在滚动条上播放视频:

代码语言:javascript
复制
playOnScroll: function() {

    var player = $('.browser video');
    var hasReached = false;

    function isInView(elem){
        return $(elem).offset().top - $(window).scrollTop() < $(elem).height();
    }

    $(window).scroll(function() {

        var section = $('#user-experience');

        // If section exists
        if (section.length) {

            if (isInView(section) && !hasReached) {
                // console.log('play video');
                hasReached = true;
                player.get(0).play();
            }

        }

    });

}

目前,该函数只在id为#user-experience的部分在视图中时执行工作,但如果我可以将该函数用于更多的部分,那就太好了。

在撰写本文的时候,我正在考虑将目标部分更改为类名,如果一个部分有这个类,它就会执行它的工作。或者有没有更好的方法来做到这一点?

如果我看一下我前面提到的第二个函数,它将在滚动上处理一些很好的传入动画,我不知道如何将该函数重用于多个元素选择器:

代码语言:javascript
复制
moduleShift: function() {

    var root = this;
    var el = $('.entry figure');
    var offset = 0.8;

    root.isVisible(el, offset);

    $(window).scroll(function() {

        // Get the offset of the window from the top of page
        var windowPos = $(this).scrollTop();

        setTimeout(function(){ 
            root.isVisible(el, offset); 
        }, 1000);

    });

}, 

isVisible: function(el, offset) {

    el.each(function() { 
        var elHeight = $(this).outerHeight();
        var offsetTop = $(this).offset().top;
        var offsetBottom = offsetTop + elHeight;

        if (offsetTop <= $(window).scrollTop() + $(window).height()*offset) {
            $(this).addClass('moduleShift');
        };

    });

}

上面相同的解决方案应该也可以应用于这个函数,但也许第一个函数也有相同的问题,有没有更好的方法呢?

如果能给我一些建议,我将不胜感激。提前谢谢你。如果还有任何问题,请告诉我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-18 21:38:58

您可以使用jQuery Waypoints。这可能是实现这一目标的最简单方法。您的函数isVisiblemoduleShift应该是当用户滚动到某个点时触发的事件的处理程序。例如:

代码语言:javascript
复制
var waypoint = new Waypoint({
  element: document.getElementById('placeOfYourVideoPlayer'),
  handler: moduleShift;
})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39019233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档