【问题标题】:Easy Smooth Scroll Plugin: How do I offset scroll?Easy Smooth Scroll Plugin:如何偏移滚动?
【发布时间】:2013-07-23 03:24:06
【问题描述】:

我正在使用适用于 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/

我可以平滑滚动到锚点,但我想将其偏移固定标题的高度 (120px)

我不是 javascript 专家,我希望这对某人来说很容易,但我无法破译在我的 .js 文件中添加偏移量的位置?

【问题讨论】:

    标签: javascript jquery wordpress smooth-scrolling


    【解决方案1】:

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

    换行:

    var desty = destinationLink.offsetTop;
    

    阅读:

    var desty = destinationLink.offsetTop - 120;
    

    (其中“120”是固定标题的像素高度)

    然后,删除该行:

    location.hash = anchor;
    

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

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多