2012-07-28 166 views
12

如何滚动na div中的水平用鼠标whell或用jquery拖动?用鼠标滚轮在div中水平滚动


我试过可拖动的,byt在我的代码中没有用。

现在我有一个水平滚动条。用鼠标滚轮滚动div中的内容有没有可能性?

+0

让我们了解您已经尝试 – 2012-07-28 12:15:49

回答

2

几天前写了这个插件。

$.fn.hScroll = function(options) 
{ 
    function scroll(obj, e) 
    { 
    var evt = e.originalEvent; 
    var direction = evt.detail ? evt.detail * (-120) : evt.wheelDelta; 

    if(direction > 0) 
    { 
     direction = $(obj).scrollLeft() - 120; 
    } 
    else 
    { 
     direction = $(obj).scrollLeft() + 120; 
    } 

    $(obj).scrollLeft(direction); 

    e.preventDefault(); 
    } 

    $(this).width($(this).find('div').width()); 

    $(this).bind('DOMMouseScroll mousewheel', function(e) 
    { 
    scroll(this, e); 
    }); 
} 

立即尝试与

$(document).ready(function(){ 
    $('#yourDiv').hScroll(); 
}); 

的div子元件的宽度应该比母体更宽。

像4000像素或东西。

<div id="yourDiv"> 
     <div style="width: 4000px;"></div> 
</div> 
+0

效果很好,jQuery的测试数据表启用(并不需要重新计算宽度虽然水平滚动条)。你可能想为此创建一个github回购。 – younes0 2014-12-02 11:06:46

+0

我可以,我稍后再试一试。从未使用过Github。 – 2014-12-07 12:27:28

34

试试用鼠标滚轮水平滚动。这是纯JavaScript:

(function() { 
    function scrollHorizontally(e) { 
     e = window.event || e; 
     var delta = Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail))); 
     document.getElementById('yourDiv').scrollLeft -= (delta*40); // Multiplied by 40 
     e.preventDefault(); 
    } 
    if (document.getElementById('yourDiv').addEventListener) { 
     // IE9, Chrome, Safari, Opera 
     document.getElementById('yourDiv').addEventListener("mousewheel", scrollHorizontally, false); 
     // Firefox 
     document.getElementById('yourDiv').addEventListener("DOMMouseScroll", scrollHorizontally, false); 
    } else { 
     // IE 6/7/8 
     document.getElementById('yourDiv').attachEvent("onmousewheel", scrollHorizontally); 
    } 
})(); 

这里有一个演示,但document.bodywindow为针对性的元素:http://rawgit.com/tovic/dte-project/master/full-page-horizontal-scrolling.html

+3

谢谢,这正是我一直在寻找的。最后一个答案不提示JQuery插件。顺便说一句:如果其他人遇到任何麻烦,请尝试在所有html之后添加它。示例 - http://jsbin.com/usabigE/2/edit – 2013-09-05 00:13:28

+0

Upvote在vanila Javascript中显示示例。 – 2016-08-19 13:55:05

+1

如果你想在元素一直向左或向右滚动后垂直滚动,你可以用下面的if语句包装'e.preventDefault();'if((delta> 0 && document.getElementById ('yourDiv')。scrollLeft> 0)||(delta <0 && document.getElementById('yourDiv')。offsetWidth + document.getElementById('yourDiv')。scrollLeft 2017-02-24 00:06:35

6

我已经通过@匿名生菜改写从答案代码。元素的宽度重新计算会被忽略,因为它是不必要的,有时也是不可取的。 这也提供了附加功能将scroll-amountpx传递给插件。

使用方法如下:

$(document).ready(function(){ 
    $('#your_div').hScroll(100); // You can pass (optionally) scrolling amount 
}); 

这里去升级插件jquery.hscroll.js

jQuery(function ($) { 
    $.fn.hScroll = function (amount) { 
     amount = amount || 120; 
     $(this).bind("DOMMouseScroll mousewheel", function (event) { 
      var oEvent = event.originalEvent, 
       direction = oEvent.detail ? oEvent.detail * -amount : oEvent.wheelDelta, 
       position = $(this).scrollLeft(); 
      position += direction > 0 ? -amount : amount; 
      $(this).scrollLeft(position); 
      event.preventDefault(); 
     }) 
    }; 
}); 

这里是相同jquery.hscroll.min.js的缩小的版本:

jQuery(function(e){e.fn.hScroll=function(l){l=l||120,e(this).bind("DOMMouseScroll mousewheel",function(t){var i=t.originalEvent,n=i.detail?i.detail*-l:i.wheelDelta,o=e(this).scrollLeft();o+=n>0?-l:l,e(this).scrollLeft(o),t.preventDefault()})}}); 

这里是JSFiddle

0

我想对@Taufik给出的答案稍加改进。

es2015模块的上下文:

const el = document.querySelector('#scroller'); 

function scrollHorizontally(e) { 
    e = window.event || e; 
    e.preventDefault(); 
    el.scrollLeft -= (e.wheelDelta || -e.detail); 
} 

function init() { 
    if (!el) { 
    return; 
    } 

    if (el.addEventListener) { 
    el.addEventListener('mousewheel', scrollHorizontally, false); 
    el.addEventListener('DOMMouseScroll', scrollHorizontally, false); 
    } else { 
    el.attachEvent('onmousewheel', scrollHorizontally); 
    } 
} 

export default init; 

主要区别在于:el.scrollLeft -= (e.wheelDelta || -e.detail);

使用e.wheelData直接在滚动偏移量意味着我们可以有惯性,从而使滚动可以逐渐减慢。我发现这对我很好。

只需在您的代码中使用就像这样(假设上面的代码位于一个名为的滚动文件中)。JS):

import scroller from './scroller.js'; 
scroller();