Javascript 为什么';我的页面滚动功能是否按预期工作?
我正在工作的网站,必须从下到上滚动。因此,当页面加载时,它显示文档的结尾。这是一种反向滚动 菜单固定在底部。当我单击菜单中的链接时,我使用Jquery animate滚动到我想要查看的元素。它正在工作,但出于某种原因,如果我单击同一个链接或另一个链接,它将返回底部,就像切换动画一样,而不是返回给定的位置 这是我的密码Javascript 为什么';我的页面滚动功能是否按预期工作?,javascript,jquery,html,scroll,jquery-animate,Javascript,Jquery,Html,Scroll,Jquery Animate,我正在工作的网站,必须从下到上滚动。因此,当页面加载时,它显示文档的结尾。这是一种反向滚动 菜单固定在底部。当我单击菜单中的链接时,我使用Jquery animate滚动到我想要查看的元素。它正在工作,但出于某种原因,如果我单击同一个链接或另一个链接,它将返回底部,就像切换动画一样,而不是返回给定的位置 这是我的密码 var winHeight=$(窗口).innerHeight(); $(文档).ready(函数(){ $(“.panel”).高度(winHeight); $(“body”)
var winHeight=$(窗口).innerHeight();
$(文档).ready(函数(){
$(“.panel”).高度(winHeight);
$(“body”).height(winHeight*$(“panel”).length);
});
window.addEventListener('resize',函数(事件){
$(“.panel”).height($(window.innerHeight());
});
$(窗口).on('scroll',function(){
$(“.panelCon”).css('bottom',$(window.scrollTop()*-1);
});
var-previous\u-element\u-pos=null;
$(文档).on(“单击“,”.menulink”,函数(事件){
var\u docHeight=(document.height!==未定义)?document.height:document.body.offsetHeight;
控制台日志(“上一个元素位置:+上一个元素位置”);
事件。预防违约(事件);
var window_height=$(window.height();
var window_top_position=$(window.scrollTop();
变量窗口底部位置=(窗口顶部位置+窗口高度);
var link_id=($(this.attr(“id”));
var$container=$(“#”+链接_id+“_面板”);
var container_height=$container.outerHeight();
var container_top_position=$container.offset().top;
变量容器底部位置=(容器顶部位置+容器高度);
console.log(“视图中的原始位置:+容器顶部位置”);
如果((容器底部位置>=窗口顶部位置)&&
(容器顶部位置0){
log(“位置为正:”+($($container.offset().top)*1);
$('html,body')。设置动画({
scrollTop:($($container.offset().top-上一个元素位置)*1
}, 5000);
上一个元素\u pos=$($container).offset().top*1
}
});
/*用于加载屏幕图像*/
梅因先生{
位置:相对位置;
身高:100%;
背景图像:url('../images/maiimg.png');
背景大小:100%100%;
背景重复:无重复;
}
/*用于NAVBAR引导程序,去除红色边框*/
navbar先生{
-webkit边界半径:0;
-moz边界半径:0;
边界半径:0;
}
/*用于导航条粘贴*/
.粘贴{
底部:0;
宽度:100%;
z指数:9999!重要;
}
.粘贴+.容器液体{
填充顶部:70px;
}
/*用于线路闭塞显示*/
1.路线闭塞{
边框:1px实心#000;
宽度:200px;
高度:400px;
显示:内联块;
保证金:5px;
}
梅努利克先生{
字体系列:arial;
}
身体{
背景色:#111318;
保证金:0;
填充:0;
}
B.panelCon{
位置:固定;
底部:0;
左:0;
宽度:100%;
}
.小组{
宽度:100%;
背景色:#111318;
}
.面板h1{
宽度:100px;
位置:相对位置;
显示:块;
保证金:0自动;
文本对齐:居中;
最高:50%;
}
RouteRatex
接触
媒体
贮藏
路线
指数
切换导航
试试这个。它对我有用。你的项目很酷
可以使用element.getBoundingClientRect()
获取到元素的距离。
你所需要的只是滚动一个与这个距离相等的像素量,不要忘记更新新的位置。
以下是单击事件处理程序的返工
var previous_element_pos = null;
//menu click events
$(document).on("click", ".menulink", function (event) {
//get selected panel id
var link_id = ($(this).attr("id"));
var $container = link_id + "_panel";
//get distance to the selected panel
var scrollDistance = document.getElementById($container).getBoundingClientRect().top;
//scroll to new position
$('html, body').animate({
scrollTop: (scrollDistance + previous_element_pos) * -1
}, 5000);
//update previous position
previous_element_pos = scrollDistance + previous_element_pos;
});
开发的专业提示:1.使用
console.log
而不是alert
。2.打开控制台。3.稍后谢谢:)我已将其更改为console log,但仍然无法正常工作。我认为问题来自于位置的数学Jeremy的建议并不是为了解决您的问题。这是非常好的发展建议。提醒是浪费你的注意力和时间。这有什么作用?它如何回答这个问题?不要只是脱口而出代码。解释你自己@罗布:谢谢你富有启发性的评论。我正在编辑它。好多了!谢谢你,谢谢你,安德尔,这很有效,你帮了我很多数学知识!非常适合移动到