我已经编写了这个简单的插件,它可以平滑地滚动浏览器窗口并将哈希链接添加到URL。
$.fn.extend({
scrollWindow: function(options) {
var defaults = { duration: "slow", easing : "swing" }
var options = $.extend(defaults, options);
return this.each(function() {
$(this).click(function(e) {
var target = $(this).attr('href');
$('html,body').animate({scrollTop: $(target).offset().top}, options.duration, options.easing, function() {
location.hash = target;
});
e.preventDefault();
});
});
}
});
如何扩展此插件,以便在DOM中存在的URL中有哈希值时自动向下滚动到页面部分?
我半知道如何使用window.location.hash
来解决这个问题,虽然我不清楚在插件中添加这个内容的最佳位置。
答案 0 :(得分:3)
将函数存储在单独的变量中,如果存在散列,则调用该函数。我已经实现了您的请求,以便每次调用location.hash
时都使用当前$().scrollWindow
。其他实现遵循相同的原则。
$.fn.extend({
scrollWindow: function(options) {
var defaults = { duration: "slow", easing : "swing" }
var options = $.extend(defaults, options);
var goToHash = function(target){
$('html,body').animate({scrollTop: $(target).offset().top}, options.duration, options.easing, function() {
location.hash = target;
});
};
if(location.hash.length > 1) goToHash(location.hash);
return this.each(function() {
$(this).click(function(e) {
//Remove junk before the hash if the hash exists:
var target = $(this).attr('href').replace('^([^#]+)#','#');
goToHash(target);
e.preventDefault();
});
});
}
});