search

Home  >  Q&A  >  body text

javascript - 个人网站为什么每次点击导航都要执行一次loading呢

网址:www.canonwu.me
问题1:为什么每次点击导航都要执行一次loading呢?
问题2:当我点击所在页面的导航按钮时,就会跳转到首页,并且页面还错乱了,这是怎么回事呢?
大神们一定帮我看看啊,谁帮我解决了问题,微信红包伺候!!!

PHP中文网PHP中文网2822 days ago382

reply all(2)I'll reply

  • PHP中文网

    PHP中文网2017-04-10 17:06:15

    看了一下,两个问题应该都是粗心写错造成的,我直接写在哪个JS文件里有错好了。

    第一个问题
    sea.js加载了main.js,在main.js中,有一个监听事件window.onhashchange,具体写的是:

    window.onhashchange = function() {
        window.btn = true;
        if (window.btn) {
            window.location.reload();
        }
    
    };

    这个window.btn,在后面的导航按钮的点击事件绑定函数中,有一个window.btn = false的操作,我想应该是想判断如果锚点变化是由点击导航引起的,就不刷新页面,否则则刷新?
    但是在你main.js这个监听事件绑定的函数中,你在if判断之前加了这行window.btn = true,也就是说只要锚点变化了,肯定就会将window.btn的值变为true,底下的判断也必将执行刷新页面,你这个判断就没有意义了。每次页面都重新加载,当然会出现你设定的loading。

    第二个问题
    sea.js加载的hidden.js中,对导航中的每个a标签进行了点击事件的监听,并且绑定了一个函数。函数里是根据当前锚点,通过一个switch判断决定具体初始化哪一个p对吧。具体初始化的方法就是require xxOUT这个文件中的init函数,例如当前锚点是skill,就去require skillOut.js。
    所有的XXOut.js应该都是复制粘贴然后略作修改吧,所以都有一个共同的错误。
    以skillOut.js为例:

    for (i = 0; i < ap.length; i++) {
        if (ap[i].dataset.hash = 'skill') {
            window.location.hash = hash;
            require('show.js').show(aA, ap);
        }
    }

    看到了吗,你的if判断里面用一个等号,不仅没有判断,而且直接赋值了。结果就是一个for循环,把所有的内容p的data-hash都赋值成了当前锚点的值,在接下来的show函数中,因为所有内容p的data-hash都符合判断条件,就会把你所有的内容全都展示出来了。

    这个问题其实是存在于每一次点击导航跳转中的,之所以只在点击所在页面导航时暴露,是因为只有这个情况下是触发hashchange,也就没有发生页面刷新。其余的时候都因为页面刷新了,重新加载了正确的页面,所以没有暴露。

    reply
    0
  • 迷茫

    迷茫2017-04-10 17:06:15

    我手机端看的,现在没电脑查看网页代码

    你应该是用了别人的插件或者现成代码 loading效果应该是在有文件在加载中,没加在完毕的提示,或者只是起个延迟显示的作用,这个你可以自己看下js代码,或者我明天用电脑了看

    页面错位我得看哈代码

    reply
    0
  • Cancelreply