【问题标题】:fullpage.js change scroll direction on scrollfullpage.js 在滚动时更改滚动方向
【发布时间】:2015-06-04 22:02:10
【问题描述】:

我正在使用fullpage.js创建一个wp站点,我想知道当用户到达某个页面时是否可以改变滚动方向。

为了更好地解释,让我们使用这个例子: http://alvarotrigo.com/fullPage/examples/navigationV.html

访问second slide时滚动方向是否可以变为水平?

因此,我希望鼠标滚轮水平滚动,而不是单击箭头进行水平导航。

是否可以使用 fullpage.js 或者我必须更改为另一个脚本?

【问题讨论】:

  • 我进行了一些编辑以提高您问题的清晰度。如果我有任何错误,请更正或恢复编辑。
  • 现在可以通过 fullpage.js 扩展 Scroll Horizontally

标签: javascript jquery html scroll fullpage.js


【解决方案1】:

好的,基本方法如下:

  1. 当您到达需要水平滚动的页面时,添加一个mousewheel 监听器:
  2. 将滚动事件转换为左右滑动变化和
  3. 禁止默认使用鼠标滚轮,除非:
    • 最后一张幻灯片并向下滚动
    • 首先滑动并向上滚动
  4. 在您输入另一张幻灯片时关闭监听器。

还有一些代码可以防止加载幻灯片时发生某些事情。

var currentSlide = 0;
var loaded = false;
$('#fullpage').fullpage({
    navigation: true,
    navigationTooltips: ['First section', 'Second section', 'Third section'],
    sectionsColor: ['#f1c40f', '#e67e22', '#c0392b'],
    loopHorizontal: false,
    afterLoad: function (anchorLink, index){
        loaded = true;
    },
    afterSlideLoad: function(anchorLink, index, slideAnchor, slideIndex){
        currentSlide = slideIndex;
        loaded = true;
    },
    onLeave: function(index, nextIndex, direction) {
        loaded = false;
        if (nextIndex == 2) {
            $('#fullpage').on("mousewheel",function(e){
                if(loaded){
                    loaded = false;
                    var delta = e.originalEvent.deltaY;
                    console.log(delta);

                    if(delta>0){ //down
                        if(currentSlide===2){//if last slide
                            $('#fullpage').off("mousewheel");
                        }else{
                            $.fn.fullpage.moveSlideRight();
                            e.preventDefault();
                            e.stopPropagation();
                        }
                    }else{ //up
                        if(currentSlide===0){//if first slide
                            $('#fullpage').off("mousewheel");
                        }else{
                            $.fn.fullpage.moveSlideLeft();
                            e.preventDefault();
                            e.stopPropagation();
                        }
                    }
                }else{ //slide still loading, don't scroll
                    e.preventDefault();
                    e.stopPropagation();
                }
            });
        }
    }
});

JSFiddle

这适用于 Chrome。我不确定e.originalEvent.deltaY 位是如何跨浏览器的。您可以将鼠标滚轮处理程序替换为this plugin 以使其正确跨平台。


这里有一个JSFiddle with jquery.mousewheel,用于完全跨平台的解决方案。

【讨论】:

  • 我也参与其中 ^^,清晰且工作,干得好,伙计。也许你应该做的更动态,比如添加data-direction=horizontal 来确定哪个部分必须水平滚动,并使用$(".section"+currentSection+" .slide").length 来获得最大值,但这已经很糟糕了;)
  • @EdenSource 是的,如果我在项目中使用它,我会的。但这在没有给出完整代码的情况下演示了解决方案。这样一来,任何使用它的人实际上都必须了解它才能使其在他们的项目中发挥作用。
  • @mattia 是的,就像上一段所说,您需要使用鼠标滚轮插件才能使其在所有浏览器上运行。 我添加了一个示例 JSFiddle 并添加了它,但这是您应该尝试自己做的事情。
  • @slicedtoad 对不起,我没有阅读最后一段,我专注于代码。我现在试试,再次抱歉,再次感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-31
  • 2016-05-19
  • 2020-12-21
  • 2017-07-09
  • 2014-02-01
相关资源
最近更新 更多