关于本节视频中js代码的几点疑问,请老师帮忙解答
(function(doc, win) { var docEl = doc.documentElement, resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize', recalc = function() { var clientWidth = docEl.clientWidth; if (!clientWidth) return; if (clientWidth >= 640) { docEl.style.fontSize = '100px'; } else { docEl.style.fontSize = 100 * (clientWidth / 640) + 'px'; } }; if (!doc.addEventListener) return; win.addEventListener(resizeEvt, recalc, false); doc.addEventListener('DOMContentLoaded', recalc, false); recalc(); })(document, window);
1、在recalc里面,用docEl.clientWidth去动态调整html的字体大小,能不能用获取浏览器窗口宽度window.innerWidth来代替,这两者有什么不同
2、if (!doc.addEventListener) return;
这句是解决兼容性问题,因为在原生事件绑定中IE需要用到attachEvent,那遇到IE的时候该怎么做呢,下面的代码好像没有看到遇到IE的解决办法
3、doc.addEventListener('DOMContentLoaded', recalc, false);
这里为什么还要监听DOMContentLoaded事件呢,下一句代码不是已经运行了recalc()吗,DOMContentLoaded只是用来检测HTML页面是否完全加载完毕,就算没加载完毕下面也会运行recalc()
4、addEventListener()的第三个参数默认就是false,这里为什么还要再写一次,不写应该也是false吧
这几个问题理解不来,希望老师能详细讲解一下,谢谢了
正在回答
同学你好,
1、如果都兼容的话,if (!doc.addEventListener) return;这句可以不用写。
2、if (!doc.addEventListener) return;这句代码,如果页面不支持事件监听,直接返回,后面的代码就不执行了,提高了性能。
3、如果遇到不兼容事件监听的浏览器,会直接返回。
4、单独的那句recalc();不可以不写,在页面初始化时要设置一下,因为css里面有使用rem,同学可以把下面的那句注释一下,滑动轮播时就会有问题。
如果还有疑问,建议新建一个问答重新提问,老师帮助解决。
如果帮助到了你,欢迎采纳~祝学习愉快~
- 参与学习 人
- 提交作业 2198 份
- 解答问题 5012 个
如果你有web端基础,既想进阶,又想进军移动端开发,那就来吧,我们专题为你带来的课程有HTML5、CSS3、移动基础、响应式、bootstrap、less等,让你在前端道路上畅通无阻!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星