网址:www.canonwu.me
问题1:为什么每次点击导航都要执行一次loading呢?
问题2:当我点击所在页面的导航按钮时,就会跳转到首页,并且页面还错乱了,这是怎么回事呢?
大神们一定帮我看看啊,谁帮我解决了问题,微信红包伺候!!!
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,也就没有发生页面刷新。其余的时候都因为页面刷新了,重新加载了正确的页面,所以没有暴露。
迷茫2017-04-10 17:06:15
我手机端看的,现在没电脑查看网页代码
你应该是用了别人的插件或者现成代码 loading效果应该是在有文件在加载中,没加在完毕的提示,或者只是起个延迟显示的作用,这个你可以自己看下js代码,或者我明天用电脑了看
页面错位我得看哈代码