gpt4 book ai didi

javascript - 鼠标移动/滚动到下一个哈希

转载 作者:太空狗 更新时间:2023-10-29 14:09:19 24 4
gpt4 key购买 nike

我添加了以下代码以便用鼠标滚动(通过单击+拖动滚动,而不是通过鼠标滚轮滚动)。到目前为止,一切顺利 - 很有魅力:

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 的拖动。换句话说,鼠标向上滚动应该跳到当前位置上方的下一个哈希,向下滚动应该跳到下面的下一个哈希。

这似乎没有包含在任何相关问题中。

Edit:

我想我需要更换

$(window).scrollTop($(window).scrollTop() + (clickY - e.pageY));

通过以下链接中的部分解决方案。不幸的是,这似乎超出了我的技能水平:

how to get nearest anchor from the current mouse position on mouse move

Solution:

我使用了 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();

});

最佳答案

希望对你有帮助

let currentElement = 0,
maxLength = $("div[id^='section']").length;

$(document).ready(function() {
$(document).on("mousewheel", function(e) {
if (e.originalEvent.wheelDelta > 0) {
currentElement = (currentElement > 0) ? currentElement - 1 : 0;

$("html, body").animate({
scrollTop: $("#section-" + currentElement).offset().top
},
200
);
} else {
currentElement = (currentElement < maxLength - 1) ? currentElement + 1 : currentElement;
$("html, body").animate({
scrollTop: $("#section-" + currentElement).offset().top
},
200
);
}
});
});
<html>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<body>
<div id="section-0">Section 1</div>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<div id="section-1">Section 2</div>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<div id="section-2">Section 3</div>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<div id="section-3">Section 4</div>
</body>

</html>

关于javascript - 鼠标移动/滚动到下一个哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50297599/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com