繁体   English   中英

简易平滑滚动插件:如何偏移滚动?

[英]Easy Smooth Scroll Plugin: How do I offset scroll?

我正在为Wordpress使用Easy Smooth Scroll插件。

以下是该插件使用的.js文件:

var ss = {
fixAllLinks: function() {
    var allLinks = document.getElementsByTagName('a');
    for (var i = 0; i < allLinks.length; i++) {
        var lnk = allLinks[i];
        if ((lnk.href && lnk.href.indexOf('#') != -1) && ((lnk.pathname == location.pathname) || ('/' + lnk.pathname == location.pathname)) && (lnk.search == location.search)) {
            ss.addEvent(lnk, 'click', ss.smoothScroll);
        }
    }
},
smoothScroll: function(e) {
    if (window.event) {
        target = window.event.srcElement;
    } else if (e) {
        target = e.target;
    } else return;
    if (target.nodeName.toLowerCase() != 'a') {
        target = target.parentNode;
    }
    if (target.nodeName.toLowerCase() != 'a') return;
    anchor = target.hash.substr(1);
    var allLinks = document.getElementsByTagName('a');
    var destinationLink = null;
    for (var i = 0; i < allLinks.length; i++) {
        var lnk = allLinks[i];
        if (lnk.name && (lnk.name == anchor)) {
            destinationLink = lnk;
            break;
        }
    }
    if (!destinationLink) destinationLink = document.getElementById(anchor);
    if (!destinationLink) return true;
    var destx = destinationLink.offsetLeft;
    var desty = destinationLink.offsetTop;
    var thisNode = destinationLink;
    while (thisNode.offsetParent && (thisNode.offsetParent != document.body)) {
        thisNode = thisNode.offsetParent;
        destx += thisNode.offsetLeft;
        desty += thisNode.offsetTop;
    }
    clearInterval(ss.INTERVAL);
    cypos = ss.getCurrentYPos();
    ss_stepsize = parseInt((desty - cypos) / ss.STEPS);
    ss.INTERVAL = setInterval('ss.scrollWindow(' + ss_stepsize + ',' + desty + ',"' + anchor + '")', 10);
    if (window.event) {
        window.event.cancelBubble = true;
        window.event.returnValue = false;
    }
    if (e && e.preventDefault && e.stopPropagation) {
        e.preventDefault();
        e.stopPropagation();
    }
},
scrollWindow: function(scramount, dest, anchor) {
    wascypos = ss.getCurrentYPos();
    isAbove = (wascypos < dest);
    window.scrollTo(0, wascypos + scramount);
    iscypos = ss.getCurrentYPos();
    isAboveNow = (iscypos < dest);
    if ((isAbove != isAboveNow) || (wascypos == iscypos)) {
        window.scrollTo(0, dest);
        clearInterval(ss.INTERVAL);
        location.hash = anchor;
    }
},
getCurrentYPos: function() {
    if (document.body && document.body.scrollTop) return document.body.scrollTop;
    if (document.documentElement && document.documentElement.scrollTop) return document.documentElement.scrollTop;
    if (window.pageYOffset) return window.pageYOffset;
    return 0;
},
addEvent: function(elm, evType, fn, useCapture) {
    if (elm.addEventListener) {
        elm.addEventListener(evType, fn, useCapture);
        return true;
    } else if (elm.attachEvent) {
        var r = elm.attachEvent("on" + evType, fn);
        return r;
    } else {
        alert("Handler could not be removed");
    }
}
}
ss.STEPS = 25;
ss.addEvent(window, "load", ss.fixAllLinks);

实时页面在这里: http : //iamjoepro.com/album/promaha/

我可以平滑滚动到锚点,但是我想用固定标头的高度(120像素)来补偿它

我不是JavaScript专家,我希望这对某些人来说很容易,但是我无法解读在.js文件中的何处添加偏移量?

我遇到了类似的问题,发现以下解决方案对我有用。

更改行:

var desty = destinationLink.offsetTop;

读书:

var desty = destinationLink.offsetTop - 120;

(其中“ 120”是固定标题的高度,以像素为单位)

然后,删除该行:

location.hash = anchor;

(否则,页面将滚动到您的120px偏移量,然后返回到锚点的位置)

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM