防止在Sennajs中点击链接跳到页面顶部

时间:2015-02-13 18:02:42

标签: javascript senna.js

我是javascript的新手,所以如果我问的话很明显,请原谅。

我正在使用Sennajs作为我的个人项目。我有gallery example之类的问题。单击链接时,会使页面跳转到顶部。我曾经使用jquery中的代码来修复它。然而,它也阻止了塞纳的工作。

$('a').click(function(e) {
    // do something 
    return false;
    e.preventDefault();
});

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

事实证明,您可以使用app.setUpdateScrollPosition(false)避免在每次SennaJS导航后跳到页面顶部:

var app = new senna.App();
app.setUpdateScrollPosition(false);

// ...your code here...

旧解决方案(不推荐):

注意:自从我在了解app.setUpdateScrollPosition(false)之前编写此解决方案时,此解决方案不必要地过于复杂。

您可以在导航前保存当前滚动位置,并在导航后滚动到正确位置,而不是阻止SennaJS执行:

var app = new senna.App();

// ...your code here...

function getScrollTop() {

    // Taken from Engineer's answer:
    // https://stackoverflow.com/questions/11193453/find-the-vertical-position-of-scrollbar-without-jquery#11193613
    return (window.pageYOffset !== undefined) ? window.pageYOffset :
        (document.documentElement || document.body.parentNode || document.body).scrollTop;
}

var scrollTop = getScrollTop();

app.on('beforeNavigate', function(event) {
    scrollTop = getScrollTop();
});

app.on('endNavigate', function(event) {
    window.scrollTo(0, scrollTop);
});

有关滚动条件和JavaScript的详细信息,请参阅Engineeranswer hereMDN's window.scrollTo() documentation

有关SennaJS生命周期事件的更多信息,请参阅the SennaJS documentation

注意:这可能是SennaJS中的一个错误,所以我创建了a bug report (#184)

答案 1 :(得分:0)

在实际调用return之前,您preventDefault。以下内容适用:

$(function(){
      $('a').click(function(e) {
         e.preventDefault();
         return false;
      });
    });

答案 2 :(得分:0)

您的代码无法正常工作的原因是您在执行任何操作之前return

$('a').click(function(e) {
    e.preventDefault();
    // do something 
    return false;
});

所以,先防止正常行为后再做一些事情。