现在已经尝试解决这个问题好几个小时了,只是想不通。
环境是WordPress我使用的是平滑滚动功能,当我选择一个页面上的链接到另一个页面上的某个位置时,它会平滑滚动。
我得到的错误是......
TypeError:$(...)。offset(...)未定义
令人讨厌的代码行是......
scrollTop: $(elem).offset().top - headerHeight
我的整个功能是
jQuery(document).ready(function($) {
var headerHeight = $('#header-wrap').height(); //When the header position is fixed
$('a').click(function(){
var hashEle = $(this).attr('href').split('#');
if (hashEle.length > 1) {
if (hashEle[1] == 'top') {
$('body, html').animate({
scrollTop: 0
},800);
} else {
jQuery('body, html').animate({
scrollTop: $('#'+ hashEle[1]).offset().top - headerHeight
},800);
}
};
})
// find element from url
hashname = window.location.hash.replace('#', '');
elem = $('#' + hashname);
if(hashname.length > 1) {
if(hashname == 'top') {
$('body, html').animate({
scrollTop: 0
},500);
} else {
$('body, html').animate({
scrollTop: $(elem).offset().top - headerHeight
},800);
}
};
});
我在这里疯了,代码工作正常,但它与WooCommerce产生冲突,我只是想不抛出错误。有人能告诉我为什么这会引起麻烦,抱歉新问题!
答案 0 :(得分:1)
我可能已经发现了问题:
您说您的网址字符串中有##位置。如果您使用:
window.location.hash
它不会返回任何东西。正确的哈希应该是#location,这与## location不同。
如果您对网址中的哈希进行硬编码,请重试,您会看到它有效。如果它不起作用,那么你就会有一些脚本在它之前起作用(但是如果你只是按照一个链接那么我就不这么认为了)
要试用,然后使用#top(或根据您的页面元素的任何内容)更改##位置