我有一个水平滚动的 div。
- 有什么方法可以检测到使用 jquery 对水平滚动箭头的点击?
笔记:
实际上,当用户单击右滚动箭头时,我希望滚动将固定的像素数向右移动,反之亦然。
该事件不应在滚动时触发。仅当用户明确单击滚动箭头时才应触发它。
有多个具有滚动条的 div,具有相同的类且没有 id。
宁愿不使用任何插件
谢谢。
我有一个水平滚动的 div。
笔记:
实际上,当用户单击右滚动箭头时,我希望滚动将固定的像素数向右移动,反之亦然。
该事件不应在滚动时触发。仅当用户明确单击滚动箭头时才应触发它。
有多个具有滚动条的 div,具有相同的类且没有 id。
宁愿不使用任何插件
谢谢。
编辑2 :另一个建议是根据您对滚动区域的实现来做这样的事情(请参阅工作 jsfiddle):
function CustomScrollArrow(elementToScroll) {
var $el = $(elementToScroll);
return $('<a>Click me to scroll</a>').css(/*...*/).click(function(){
$el.scrollLeft($el.scrollLeft()+10);
});
}
$('.ScrollAreaClass').each(function(){
// You could choose to append to your scrolling
// areas or their wrapper classes or whatever...
$('body').append(new CustomScrollArrow(this));
});
之后,只需为您的手工箭头设计样式即可。
编辑 1:我看到你更新了你的问题,所以这里有一个更新的答案和一个替代解决方案。
您可以尝试通过使用自定义滚动条实现来规避该问题,例如Kelvin Luck 的jScrollPane或任何其他的,等等。如果解决方案在箭头上提供点击事件 - 那么你就设置好了。否则只是做一些修补......
但是,我坚持我的观点,除非您希望在浏览器执行箭头单击之前执行某个操作,否则我建议您为该单击的实际结果(即滚动)添加一个事件处理程序。
这样做将有助于避免浏览器中滚动的各种实现之间的不一致;如果以其他方式(即滑动手势)执行滚动,将继续工作;如果有一些 javascript 代码替换了滚动条的默认浏览器实现,它仍然可以工作。
jQuery 提供.scroll处理程序来捕获滚动,并提供.scrollLeft来确定水平滚动内容的结果位置。
尝试工作的 jsfiddle或查看以下代码:
// Cache the initial scroll position:
var initialLeftScroll = $('#wrapper').scrollLeft();
// Bind event:
$('#wrapper').scroll(function (ev) {
// Get new horizontal scroll offset:
var currentLeftScroll = $('#wrapper').scrollLeft();
// Determine the difference
// (did the user scroll horizontally or just vertically?):
var leftScrollDifference = currentLeftScroll - initialLeftScroll;
// Now we can check
if (leftScrollDifference) {
/* Do something here */
}
// Reset the cache:
initialLeftScroll = currentLeftScroll;
});
您可以使用 jquery 的 .scroll 功能。