我希望有效地拦截对.scrollTo的所有调用,并检查该元素是否为某个元素,以便可以停止浏览器滚动到该元素。运行.scrollTo的JavaScript文件超出了我的控制范围,因此需要对其进行拦截。

这是我到目前为止的代码:

var oScrollTo = scrollTo;
HTMLElement.prototype.scrollTo = function(){
    var scrollId = this.id;
    if ( scrollId !== 'id-of-element') {
        console.log("yes");
        $(scrollId).oScrollTo();
    } else {
        console.log("no");
    }
};


它基本上是以下答案的组合:https://stackoverflow.com/a/1740510和以下答案:https://stackoverflow.com/a/19209665

当前,它拦截.scrollTo调用,如果不是匹配元素,则记录“是”,否则记录“否”。

但是,在记录“是”但没有记录时,它仍应以常规方式运行.scrollTo。关于如何实现这一目标的任何想法将不胜感激!谢谢!

最佳答案

您的代码大部分是正确的,但是您没有将orgScrollTo附加到适当的位置来执行您尝试的操作。尝试以下方法:

HTMLElement.prototype.orgScrollTo = HTMLElement.prototype.scrollTo;
HTMLElement.prototype.scrollTo = function(){
    var scrollId = this.id;
    if ( scrollId !== 'id-of-element') {
        console.log("yes");
        this.orgScrollTo();
    } else {
        console.log("no");
    }
};

关于javascript - JavaScript原型(prototype)-对某些元素覆盖.scrollTo,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19547198/

10-12 15:08