老师有点理解不了

老师有点理解不了

loadimg($img.data('src'),function(url){

                $img.attr('src',url);

                console.log(index+':loaded');

            })

        });

        function loadimg(url,imgLoaded){

            var image=new Image();//创建 一个img标签

            image.onload=function(){//加载完成之后触发

                if(typeof imgLoaded==='function')imgLoaded(url);

            }

            image.src=url;

        }就是既然新创建了一个img标签为啥还要用$img.attr('src',url);改变原来的那个标签的src,为啥不直接用新标签替换原来的那个标签呢?

正在回答

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

2回答

同学你好,主要是考虑url地址不对的情况,设置一张备用图。参考如下:

如果只是要定时器延迟的效果,是不需要创建新图片的,直接如下:

http://img1.sycdn.imooc.com//climg/5eba873c09b7bda806820337.jpg

但如上情况中,如果$img.data('src')没有获取到src属性,或者我们人为的传递错误时,没有进行错误处理(错误处理就是我们设置备用的图片)。所以老师创建了一个新img,然后会先执行定时器,当1s之后,图片能够加载成功,则说明url没有问题,执行onload(图片加载成功就会执行onload),调用imgLoaded插入图片。反之,url有问题,失败则执行onerror。此时就会调用imgFailed,显示备用图。

http://img1.sycdn.imooc.com//climg/5eba8825099b358407490385.jpg

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

好帮手慕夭夭 2020-05-12 16:42:57

同学你好,可以直接插入,但是从性能方面看,如果在页面中插入新的元素,会造成页面重新渲染。直接修改页面现有的元素的属性,并不会重新渲染(了解一下即可)。所以修改现有元素的src属性更好一点哦。当然了,这里插入的图片不多,影响也不大。根据自己的习惯去写。不过更推荐老师的这一种方式。

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

  • 提问者 幻城163630 #1
    不是老师我有点理解不了,既然新创建了一个img标签又直接在原来的标签上面修改src,那么这个新创建img的又有什么作用呢?难道就是让新创建的加载图片地址延迟一下然后完成新标签的图片加载,再去修改原来的图片地址吗?就是为了一个延迟吗?
    2020-05-12 17:09:30
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

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

在线咨询

领取优惠

免费试听

领取大纲

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