url和img中的数据是这样传的吗?
来源:5-2 Promise的应用
电磁护盾
2021-10-01 22:53:56
4回答
同学你好,最后测试的没问题,下面的img先执行。onload事件是图片加载成功后才会执行的,所以先执行下面的img.src=url,再执行onload事件中的resolve(img)
url传递没问题,祝学习愉快!
电磁护盾
提问者
2021-10-01
我加输出语句试了一下,应该是下面的img比上面的img先执行。那么是下面的img把数据传给上面的onload()方法中的img,对吗?为什么上面的onload()方法中的img后执行?
电磁护盾
提问者
2021-10-01
这两个位置的img谁先执行?还有是哪个img把数据传给另一个img?为什么要往resolve()方法中传入img?
电磁护盾
提问者
2021-10-01
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> #img { width: 80%; padding: 10%; } </style> </head> <body> <img src="images/0.jpg" alt="" id="img" /> <script> // 异步加载图片 const loadImgAsync = url => { console.log(url+'<----------1'); // images/1.jpg<----------1 return new Promise((resolve, reject) => { // 实例化Image构造函数,得到Image对象 const img = new Image(); // 绑定图片加载成功事件 img.onload = () => { console.log(img+'<----------2'); // [object HTMLImageElement]<----------2 // 图片加载成功后调用resolve方法 resolve(img); }; // 绑定错误事件 img.onerror = () => { // 图片加载失败后调用reject方法,传入错误原因 reject(new Error(`Could not load image at ${url}`)); }; // 把url赋值给src属性后,浏览器立即向服务器端发送请求,把图片要过来 // 这里的对象的src属性和上面的DOM元素中的src不是一个 img.src = url; }); } const imgDOM=document.getElementById('img'); // 当图片调用成功后会执行then的第一个回调 // 第一张图片加载完后立即切换到第二张图片 loadImgAsync('images/1.jpg').then(img=>{ console.log(img.src+'<----------3'); // http://127.0.0.1:5500/images/1.jpg<----------3 // imgDOM.src=img.src; // 1秒钟后替换图片 setTimeout(()=>{ imgDOM.src=img.src; },1000) }).catch(err=>{ console.log(err); }) </script> </body> </html>
相似问题