缓动平滑滚动不起作用
Smooth scrolling with easing isn't working
我有一个 JQuery
函数,它应该允许使用 JQuery
缓动进行平滑滚动,但是它不起作用,我似乎找不到错误。
函数的代码是
$(function(){
$('a[href*=#]').click(function() {
if (location.pathname.replace(/^\//,”) == this.pathname.replace(/^\//,”) && location.hostname == this.hostname) {
var $target = $(this.hash);
$target = $target.length && $target || $('[name=' + this.hash.slice(1) +']');
if ($target.length) {
var targetOffset = $target.offset().top;
$(‘html,body’).animate({scrollTop: targetOffset}, {duration:1600,easing:'easeInBounce'});
return false;
}
}
});
});
我做了一个JSFiddle 里面的函数来举个例子。 (我包含了 JQuery
缓动的代码)
JSFiddle 中有一个类似的函数,但是,即使这个函数确实有效,它也不包括使用缓动的选项。如果能帮助我解决问题,我将不胜感激
编辑
扩展我的意思是行不通的;单击链接时没有动画,它只是立即滚动到页面中的那个位置。
你这里发生了一些非常奇怪的事情。
在下一行中,您使用的是单个双引号而不是两个单引号
if (location.pathname.replace(/^\//,”) == this.pathname.replace(/^\//,”) && location.hostname == this.hostname) {
在这一行中,您使用的字符不是单引号
$(‘html,body’).animate()
最后我们明白了。 jsFiddle
$(function(){
$('a[href*="#"]').click(function() {
if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) {
var $target = $(this.hash);
$target = $target.length && $target || $('[name=' + this.hash.slice(1) +']');
if ($target.length) {
var targetOffset = $target.offset().top;
$('html,body').animate({scrollTop: targetOffset}, {duration:1600,easing:'easeInBounce'});
return false;
}
}
});
});
编辑
为了回答您在此答案的评论中提出的问题,为了让“#”link 正常工作,我们将您的 $target =
行更改为此
$target = $target.length ? $target : $('html');
为了让锚点出现在页面上,我们简单地从函数中删除 return false;
。在玩完代码后,我将其简化为:
$(function () {
$('a[href*="#"]').click(function () {
var $target = $(this.hash);
$target = $target.length ? $target : $('html');
var targetOffset = $target.offset().top;
$('html,body').animate({scrollTop: targetOffset}, {duration: 1600, easing: 'easeInBounce'});
});
});
单击 link 后,我得到了一个带有上述解决方案的问题,它会在平滑滚动之前向下移动。对于那些和我有同样问题的人,你可以使用这个版本,它效果更好
// Smooth scrolling using jQuery easing with other links
$('a[href*="#"]').click(function() {
if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') && location.hostname == this.hostname) {
var target = $(this.hash);
target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');
if (target.length) {
$('html, body').animate({
scrollTop: (target.offset().top - 54)
}, 1000, "easeInOutExpo");
return false;
}
}
});
我有一个 JQuery
函数,它应该允许使用 JQuery
缓动进行平滑滚动,但是它不起作用,我似乎找不到错误。
函数的代码是
$(function(){
$('a[href*=#]').click(function() {
if (location.pathname.replace(/^\//,”) == this.pathname.replace(/^\//,”) && location.hostname == this.hostname) {
var $target = $(this.hash);
$target = $target.length && $target || $('[name=' + this.hash.slice(1) +']');
if ($target.length) {
var targetOffset = $target.offset().top;
$(‘html,body’).animate({scrollTop: targetOffset}, {duration:1600,easing:'easeInBounce'});
return false;
}
}
});
});
我做了一个JSFiddle 里面的函数来举个例子。 (我包含了 JQuery
缓动的代码)
JSFiddle 中有一个类似的函数,但是,即使这个函数确实有效,它也不包括使用缓动的选项。如果能帮助我解决问题,我将不胜感激
编辑
扩展我的意思是行不通的;单击链接时没有动画,它只是立即滚动到页面中的那个位置。
你这里发生了一些非常奇怪的事情。
在下一行中,您使用的是单个双引号而不是两个单引号
if (location.pathname.replace(/^\//,”) == this.pathname.replace(/^\//,”) && location.hostname == this.hostname) {
在这一行中,您使用的字符不是单引号
$(‘html,body’).animate()
最后我们明白了。 jsFiddle
$(function(){
$('a[href*="#"]').click(function() {
if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) {
var $target = $(this.hash);
$target = $target.length && $target || $('[name=' + this.hash.slice(1) +']');
if ($target.length) {
var targetOffset = $target.offset().top;
$('html,body').animate({scrollTop: targetOffset}, {duration:1600,easing:'easeInBounce'});
return false;
}
}
});
});
编辑
为了回答您在此答案的评论中提出的问题,为了让“#”link 正常工作,我们将您的 $target =
行更改为此
$target = $target.length ? $target : $('html');
为了让锚点出现在页面上,我们简单地从函数中删除 return false;
。在玩完代码后,我将其简化为:
$(function () {
$('a[href*="#"]').click(function () {
var $target = $(this.hash);
$target = $target.length ? $target : $('html');
var targetOffset = $target.offset().top;
$('html,body').animate({scrollTop: targetOffset}, {duration: 1600, easing: 'easeInBounce'});
});
});
单击 link 后,我得到了一个带有上述解决方案的问题,它会在平滑滚动之前向下移动。对于那些和我有同样问题的人,你可以使用这个版本,它效果更好
// Smooth scrolling using jQuery easing with other links
$('a[href*="#"]').click(function() {
if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') && location.hostname == this.hostname) {
var target = $(this.hash);
target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');
if (target.length) {
$('html, body').animate({
scrollTop: (target.offset().top - 54)
}, 1000, "easeInOutExpo");
return false;
}
}
});