关于本节视频中js代码的几点疑问,请老师帮忙解答

关于本节视频中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吧

这几个问题理解不来,希望老师能详细讲解一下,谢谢了

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,

1、如果都兼容的话,if (!doc.addEventListener) return;这句可以不用写。

2、if (!doc.addEventListener) return;这句代码,如果页面不支持事件监听,直接返回,后面的代码就不执行了,提高了性能。

3、如果遇到不兼容事件监听的浏览器,会直接返回。

4、单独的那句recalc();不可以不写,在页面初始化时要设置一下,因为css里面有使用rem,同学可以把下面的那句注释一下,滑动轮播时就会有问题。

如果还有疑问,建议新建一个问答重新提问,老师帮助解决。

如果帮助到了你,欢迎采纳~祝学习愉快~

好帮手慕言 2019-08-02 18:42:17

同学你好,

1、不能。innerHeight/innerWidth    获取的是可视区的宽高,包括了滚动条的宽度,

clientHeight/clientWidth   获取的是可视区的宽高,不包括滚动条的宽度。

2、如果是IE的话,使用attachEvent,IE是支持attachEvent的。

3、下面的recalc执行的时候 不能保证已经加载完毕,所以 在页面加载完成以后 再执行一次

4、默认为false,再写一遍false 也是没有问题的哦。

如果帮助到了你,欢迎采纳~祝学习愉快~

  • 提问者 人生的起源 #1
    如果手机端的浏览器都支持addEventListener(),是不是if (!doc.addEventListener) return;这句就不用写了?
    2019-08-02 20:13:28
  • 提问者 人生的起源 #2
    上面那段代码只写if (!doc.addEventListener) return;,下面却没写出不兼容浏览器的解决方案,这样做意义好像也不大?
    2019-08-02 20:14:57
  • 提问者 人生的起源 #3
    遇到不兼容的浏览器,等于没效果是不是?
    2019-08-02 20:15:30
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
响应式开发与常用框架 2018
  • 参与学习           人
  • 提交作业       2198    份
  • 解答问题       5012    个

如果你有web端基础,既想进阶,又想进军移动端开发,那就来吧,我们专题为你带来的课程有HTML5、CSS3、移动基础、响应式、bootstrap、less等,让你在前端道路上畅通无阻!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师