css 将滚动轮用于水平滚动

flseospp  于 2023-04-23  发布在  其他
关注(0)|答案(2)|浏览(132)

我对网页设计相对较新。我在设计中使用PHP,HTML,CSS和JQuery。我创建了一个滚动图像查看器,图像作为内联块。高度固定为屏幕的100%,因此垂直滚动条永远不会使用。我允许在x方向滚动,因此用户可以水平滚动图像。
这一切工作,但滚动轮什么也不做。有没有无论如何,我可以使垂直滚动输入从鼠标翻译为水平滚动?
CSS:

.photoViewer {
    white-space: nowrap;
    height: 100%;
    overflow-x: scroll;
    overflow-y: hidden;
    padding-top: 50px;

}

.photoViewer li {

   display: inline-block;
   height: 100%;
    padding: 0;
}

.photoViewer li img{
    height: 100% ;
    width: auto;
    margin-right: 10px;
}
xkrw2x1b

xkrw2x1b1#

有一个jQuery插件可以帮助你完成这一点,叫做jQuery Mousewheel。CSS技巧的Chris Coyier在他的示例here中使用了它,它基本上将Y轴滚动转换为X轴滚动:

// Code by Chris Coyier
$(function() {
    $("body").mousewheel(function(event, delta) {
        this.scrollLeft -= (delta * 30);
        event.preventDefault();
    });
});
hsgswve4

hsgswve42#

您可以使用wheel事件并将deltaY转换为X。
基本上:

$(".inner").on("wheel", function() { 
    var outer = $(this).closest(".outer");
    outer.scrollLeft(outer.scrollLeft() + e.originalEvent.deltaY);
    e.preventDefault();
});

但是这有点不稳定,所以你可以添加一个动画测试,如果动画时间太长的话,这个测试会很笨拙,因此使用了exta .stop()
你可以使用css转换来实现更好的动画/更平滑的滚动。

$("#inner").on("wheel", function(e) {
  var outer = $(this).closest("#outer")
  //outer.scrollLeft(outer.scrollLeft() + e.originalEvent.deltaY)
  outer.stop(false,false).animate({scrollLeft:"+="+e.originalEvent.deltaY}, 50)
  e.preventDefault();
});
#outer {
  display:block;
  width:200px;
  height:100px;
  overflow-y:hidden;
  overflow-x:scroll;
  border:1px solid red
}
#inner {
  display:block;
  width: 500px;
  height:100px;
  border:1px solid blue;
  background: blue;
  background: -webkit-linear-gradient(left,red,orange,yellow,green,blue,indigo,violet);
  background: -o-linear-gradient(left,red,orange,yellow,green,blue,indigo,violet);
  background: -moz-linear-gradient(left,red,orange,yellow,green,blue,indigo,violet);
  background: linear-gradient(to right, red,orange,yellow,green,blue,indigo,violet); 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id='outer'>
<div id='inner'>
</div>
</div>

(显然不要使用mousehweel,因为它是非标准的-可能是jquery为您处理的)。

相关问题