【发布时间】:2013-08-07 20:49:17
【问题描述】:
基本上我有一个水平滚动内容的网站。因为在整个页面水平滚动,而不仅仅是一个 div。
我正在尝试实现 onmousedown 或 hover 左右箭头按钮(哪个还没有太大关系),左右滚动整个窗口(平滑)。
这个网站做了我想要的小中心箭头:http://www.clholloway.co.za
有人可以帮忙吗?干杯。
【问题讨论】:
标签: jquery navigation horizontal-scrolling
基本上我有一个水平滚动内容的网站。因为在整个页面水平滚动,而不仅仅是一个 div。
我正在尝试实现 onmousedown 或 hover 左右箭头按钮(哪个还没有太大关系),左右滚动整个窗口(平滑)。
这个网站做了我想要的小中心箭头:http://www.clholloway.co.za
有人可以帮忙吗?干杯。
【问题讨论】:
标签: jquery navigation horizontal-scrolling
我认为使用一点 jQuery 就可以实现您想要的。基本思想是处理一些事件(onmouseenter、mousedown 等),然后您可以使用这些事件来启动滚动。
想象你有一些看起来像这样的标记:
<div id="parent">
<div class="contentBlock">1</div>
<div class="contentBlock">2</div>
<div class="contentBlock">3</div>
<div class="contentBlock">4</div>
<div class="contentBlock">5</div>
</div>
<span id="panLeft" class="panner" data-scroll-modifier='-1'>Left</span>
<span id="panRight" class="panner" data-scroll-modifier='1'>Right</span>
还有一些样式可以确保它会导致窗口滚动:
#parent {
width:6000px;
}
.contentBlock {
font-size:10em;
text-align:center;
line-height:400px;
height:400px;
width:500px;
margin:10px;
border:1px solid black;
float:left;
}
.panner {
border:1px solid black;
display:block;
position:fixed;
width:50px;
height:50px;
top:45%;
}
.active{
color:red;
}
#panLeft {
left:0px;
}
#panRight {
right:0px;
}
您可以结合使用样式、setInterval 和 jQuery.scrollLeft() 来实现您想要的效果。
(function () {
var scrollHandle = 0,
scrollStep = 5,
parent = $(window);
//Start the scrolling process
$(".panner").on("mouseenter", function () {
var data = $(this).data('scrollModifier'),
direction = parseInt(data, 10);
$(this).addClass('active');
startScrolling(direction, scrollStep);
});
//Kill the scrolling
$(".panner").on("mouseleave", function () {
stopScrolling();
$(this).removeClass('active');
});
//Actual handling of the scrolling
function startScrolling(modifier, step) {
if (scrollHandle === 0) {
scrollHandle = setInterval(function () {
var newOffset = parent.scrollLeft() + (scrollStep * modifier);
parent.scrollLeft(newOffset);
}, 10);
}
}
function stopScrolling() {
clearInterval(scrollHandle);
scrollHandle = 0;
}
}());
完整的 jsFiddle 演示了这种方法:http://jsfiddle.net/jwcarroll/atAHh/
【讨论】:
我创建了这个Fiddle 来帮助您。看看它是否有助于为您指明正确的方向。您可能需要根据自己的情况对其进行调整,但希望它能满足您的需要。
请注意,我将overflow:hidden 放在<body> 上,因此不会显示显式滚动条;如果需要,可以更改。
干杯!
【讨论】:
如果您将body 元素设置为大于视口的宽度(并且不设置溢出隐藏),浏览器将自动支持水平箭头键滚动。与在此网页上使用垂直箭头滚动相同。
【讨论】: