垂直滚动时水平滚动?

时间:2019-07-23 13:33:32

标签: javascript jquery css horizontal-scrolling

我知道这个主题在这里已经被问了很多,但是我找不到任何最新消息,据我所知,后来的jQuery版本不再支持这些功能。

我有一个可以水平滚动的网站,它的工作原理很棒,但是只有当我横向滑动触控板而不是垂直滚动时,它才能正常工作。有谁知道更新的方式吗?

如果需要,可以提供更多代码。只是想知道是否有人知道解决此问题的一般方法。

以下是我要查找的示例(向下滚动之前的第一个粉红色部分): https://alvarotrigo.com/fullPage/extensions/scroll-horizontally.html#firstPage/2

这是我目前所拥有的基本设置,它只会在横向滚动而不是垂直滚动时滚动。 https://codepen.io/caitlinmooneyx/pen/WVrggB

这里是我到目前为止尝试过的内容:

How to Horizontal Scroll when scrolling vertical?

并且:

var scroller = {};
scroller.e = document.getElementById("wrapper");

if (scroller.e.addEventListener) {
    scroller.e.addEventListener("mousewheel", MouseWheelHandler, false);
    scroller.e.addEventListener("DOMMouseScroll", MouseWheelHandler, false);
} else scroller.e.attachEvent("onmousewheel", MouseWheelHandler);

function MouseWheelHandler(e) {

    // cross-browser wheel delta
    var e = window.event || e;
    var delta = -20 * (Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail))));

    var pst = $('#wrapper').scrollLeft() + delta;

    if (pst < 0) {
        pst = 0;
    } else if (pst > $('.card').width()) {
        pst = $('.card').width();
    }

    $('#wrapper').scrollLeft(pst);

    return false;
};

1 个答案:

答案 0 :(得分:1)

这是我写的一个小例子,没有丝毫影响。

您可以使用JQUI进行平滑滚动等。

随心所欲更改它,让我知道您的想法

否:这仅是mouseweel尝试垂直滚动的示例

var delta = -1;
var currentPlayer;


$(".container").bind("wheel",function(e){
var players = $(this).find(".player");
var y =e.originalEvent.wheelDeltaY;

function setDelta(scroll){
if (y>0 && 0 <= delta -1)
    delta--;
     else if (y<0 && delta +1 < players.length) 
     delta++;

currentPlayer = $(players[delta]);
  if (scroll){
// JQUI $(window).animate({ scrollTop: currentPlayer.offset().top}, 1000);
$(window).scrollTop(currentPlayer.offset().top)
}
}
if (!currentPlayer){
     setDelta();
}
// Current visiable page in the Section/player
var vItem = currentPlayer.find("div").filter(function(i,x){
return !$(x).is(":hidden")
});

if (y<0 && vItem.next().length>0){
        vItem.hide().next().show();
        }
    else if (y >= 0 && vItem.prev().length>0)
           vItem.hide().prev().show();
        else {
           /// scroll downor upp to the next Section
             setDelta(true);
       
        }
return false; // disable scroll 

});
.player{
width:100vw;
height:100vh;
background: red;
border:1px solid #CCC;
overflow:hidden;

}

.player:last{
background: blue;
}
.player>div:not(:first-child){
display:none;
}

.player> div{
float:left;
width:100%;
height:100%;
color:white;
}
.container {
  overflow:hidden;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container">
<div class="player">
<div>page1</div>
<div>page2</div>
<div>page3</div>
</div>

<div class="player" style="background: blue">
<div>page1</div>
<div>page2</div>
<div>page3</div>
</div>
</div>