【发布时间】:2018-10-22 04:22:43
【问题描述】:
我添加了以下代码以便用鼠标滚动(点击+拖动滚动,而不是鼠标滚轮)。到目前为止,一切都很好 - 就像一个魅力:
var clicked = false, clickY;
$(document).on({
'mousemove': function(e) {
clicked && updateScrollPos(e);
},
'mousedown': function(e) {
clicked = true;
clickY = e.pageY;
},
'mouseup': function() {
clicked = false;
$('html').css('cursor', 'auto');
}
});
var updateScrollPos = function(e) {
$('html').css('cursor', 'row-resize');
$(window).scrollTop($(window).scrollTop() + (clickY - e.pageY));
}
我正在尝试更改此滚动行为,以便每次定向单击+拖动鼠标移动在例如之后跳转到下一个/最近的哈希。 10px 拖动。换句话说,鼠标向上滚动应该跳转到当前位置上方的下一个哈希,向下滚动应该跳转到下面的下一个。
任何相关问题似乎都没有涵盖这一点。
编辑:
我想我需要更换
$(window).scrollTop($(window).scrollTop() + (clickY - e.pageY));
通过以下链接中的部分解决方案。不幸的是,这似乎超出了我的技能水平:
how to get nearest anchor from the current mouse position on mouse move
解决方案:
我使用了 Saeed Ataee 的答案,对那个代码非常满意,但是用我已经到位的以下代码替换了鼠标滚轮代码部分,只是碰巧在我这边工作得更好(我相信他很好,只是在这里给出一个替代方案):
$('#nav').onePageNav();
var $current, flag = false;
$('body').mousewheel(function(event, delta) {
if (flag) { return false; }
$current = $('div.current');
if (delta > 0) {
$prev = $current.prev();
if ($prev.length) {
flag = true;
$('body').scrollTo($prev, 1000, {
onAfter : function(){
flag = false;
}
});
$current.removeClass('current');
$prev.addClass('current');
}
} else {
$next = $current.next();
if ($next.length) {
flag = true;
$('body').scrollTo($next, 1000, {
onAfter : function(){
flag = false;
}
});
$current.removeClass('current');
$next.addClass('current');
}
}
event.preventDefault();
});
【问题讨论】:
-
感谢您的输入,但我认为它根本不是重复的,即使它可能包含有用的代码。我在这里尝试做的是重写我的鼠标单击滚动行为以滚动到哈希,而不仅仅是向上和向下滚动。
标签: javascript jquery html