平滑的水平滚动绑定到鼠标滚轮
下面是使用鼠标滚轮进行水平滚动的工作示例,但它不能像Firefox或Opera中的普通垂直滚动一样平滑滚动。
$(function() { $("html, body").mousewheel(function(event, delta) { this.scrollLeft -= (delta * 30); event.preventDefault(); }); });
( http://brandonaaron.net/code/mousewheel/docs )
我做了现场演示,向您展示它是如何发生的。 http://jsfiddle.net/Dw4Aj/
我希望这个滚动像垂直滚动一样工作。 两者都有鼠标滚轮和光滑度。 有人能帮我吗?
平滑滚动是浏览器特定的function。
如果你想要的东西适用于所有这些东西,那么你需要在你身边做。 jQuery有多种平滑滚动的实现。
实际上你甚至可能需要所谓的动态滚动。 如果是这样,试试jquery.kinetic
我认为它是记住最后一个滚动事件时间戳,使用缓动function,以获得良好的结果http://jsfiddle.net/oceog/Dw4Aj/13/
$(function() { $("html, body").mousewheel(function(event, delta) { var mult = 1; var $this = $(this); if (event.timeStamp - $this.data('oldtimeStamp') < 1000) { //calculate easing here mult = 1000 / (event.timeStamp - $this.data('oldtimeStamp')); } $this.data('oldtimeStamp', event.timeStamp); this.scrollLeft -= (delta) * mult; event.preventDefault(); }); });
尝试将您的函数与.animate()结合使用
$(function() { $("html, body").mousewheel(function(event, delta) { var scroll_distance = delta * 30 this.animate(function(){ left: "-=" + scroll_distance + "px", }); event.preventDefault(); }); });
我实际上是自己做了这件事并且有效。 我在我创建的Web应用程序上创建了一个Instagram feed,而我正在使用的其他插件经常崩溃:
$('#add_instagram').on('mousewheel', function(e,d){ var delta = d*10; $('#move_this').animate({ top: "-=" + delta + "px" },3); e.preventDefault(); });
我找到了其他不错的解决方案 – 使用包装器,所以你滚动绝对滚动到相同的位置,如果你只需要滚动,没有文本选择或其他(可能可以工作,但我很累)
$(function() { var scroll = $('.scrollme'); var h = scroll.parent().height(); var w = scroll.parent().width(); var t = scroll.offset().top; var l = scroll.offset().left; var vertscroll_wrap = $("").height(h).width(10000).css('position', 'absolute').css('top', t).css('left', l).css('z-index', 10000).css('opacity', 0.5).css('overflow-y', 'scroll'); var vertscroll = $('').height(10000).css('width', '100%').css('opacity', 0.5); vertscroll_wrap.append(vertscroll); $('body').append(vertscroll_wrap); vertscroll_wrap.height('100%'); vertscroll_wrap.scroll(function() { $(scroll).parent().scrollLeft($(this).scrollTop()); }); });
http://jsfiddle.net/oceog/Dw4Aj/16/
我做了另一个样本,现在没有整理包装,可以选择http://jsfiddle.net/oceog/DcyWD/
我只想把它留在这里。
jQuery(document).ready(function($) { $("html, body").mousewheel(function(e, delta) { $('html, body').stop().animate({scrollLeft: '-='+(150*delta)+'px' }, 200, 'easeOutQuint'); e.preventDefault(); }); });
只需改变这个:
this.scrollLeft -= (delta * 30);
对此:
this.scrollLeft -= (delta * 1);