我收到此错误
TypeError:$(...)。offset(...)未定义
箭头指向$。
我查看了在标题中输入此错误时弹出的问题,但我没有得到解决方案。
这是我的jquery
$(document).ready(function () {
if(window.location.href.indexOf("#") > -1)
{
var pieces = window.location.href.split(/[\s_]+/);
var section = pieces[pieces.length-1];
var element_to_scroll_to = $('#' + section);
var navbar_height = parseInt($('.navbar').css('height').replace('px', ''));
animate_scroll(element_to_scroll_to, navbar_height, 25);
}
});
function animate_scroll (element, variable, offset) {
$('html, body').stop().animate({
scrollTop: $(element).offset().top - variable - offset
}, 600);
}
这是我的js文件的顺序
{{ HTML::script('js/jquery-1.10.2.js') }}
{{ HTML::script('js/jquery-ui.js') }}
{{ HTML::script('js/bootstrap.min.js') }}
{{ HTML::script('js/wow.min.js') }}
{{ HTML::script('js/jquery.superslides.min.js') }}
{{ HTML::script('js/slick.min.js') }}
{{ HTML::script('js/modernizr.custom.js') }}
{{ HTML::script('js/classie.js') }}
{{ HTML::script('js/elastic_grid.min.js') }}
{{ HTML::script('js/webkrunch_portfolio.js') }}
{{ HTML::script('js/main.js') }}
答案 0 :(得分:1)
所以,很容易打破这里发生的事情。
您正在使用名为animate_scroll
的该功能,并将参数element
称为element_to_scroll_to
。
考虑到这一点,element_to_scroll_to
已经通过以下方式调用jQuery
$('#' + section);
所以当调用animate_scroll()
时,它会看到:
$('html, body').stop().animate({
scrollTop: $($('#' + section)).offset().top - variable - offset
}, 600);
// Notice the dual call of jQuery
您应该只需致电element
,而不是再次重新定义jQuery
,如下所示:
$('html, body').stop().animate({
scrollTop: element.offset().top - variable - offset
}, 600);
编辑:
因此,如果您仍然遇到错误,问题还有待解决。以下是我将采取的步骤来确定问题。
if(window.location.href.indexOf("#") > -1) // Perhaps this is not returning > -1
{
var pieces = window.location.href.split(/[\s_]+/); // Perhaps this is not creating an array to pull from
var section = pieces[pieces.length-1]; // Perhaps the last element doesn't exist in the first place based on the above tests
var element_to_scroll_to = $('#' + section);
var navbar_height = parseInt($('.navbar').css('height').replace('px', ''));
animate_scroll(element_to_scroll_to, navbar_height, 25);
console.log(pieces);
console.log(section);
console.log(element_to_scroll_to);
}
}
为了测试上述内容,我将运行简单的控制台测试,例如:
console.log(pieces);
console.log(section);
console.log(element_to_scroll_to);
在if
语句末尾添加控制台后查看控制台,它应该进一步说明哪个部分未定义。
答案 1 :(得分:0)
我认为你应该对元素滚动进行测试。
您的代码变得像
$(document).ready(function () {
if(window.location.href.indexOf("#") > -1)
{
var pieces = window.location.href.split(/[\s_]+/);
var section = pieces[pieces.length-1];
var element_to_scroll_to = $('#' + section);
if(element_to_scroll_to.length) {
var navbar_height =
parseInt($('.navbar').css('height').replace('px', ''));
animate_scroll(element_to_scroll_to, navbar_height, 25);
}
}
});
function animate_scroll (element, variable, offset) {
$('html, body').stop().animate({
scrollTop: $(element).offset().top - variable - offset
}, 600);
}