首页 > 编程语言 >javascript promise all实现图片顺序加载

javascript promise all实现图片顺序加载

时间:2023-11-15 16:46:45浏览次数:41  
标签:let javascript JPG promise path ctx1 createElement document 加载

不使用promise时是异步加载,图片加载的顺序不固定

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <style>
        * {
            margin: 0;
            padding: 0;
        }
    </style>
    <title>demo</title>
</head>
<body>
<div id="image_div" style="height:800px;overflow:scroll;">
    <table id="image_table">
    </table>
</div>
</body>
</html>
<script>
    let path_list = [
        "00.JPG",
        "01.JPG",
        "02.JPG",
        "03.JPG",
        "04.JPG",
        "05.JPG",
        "06.JPG",
        "07.JPG",
        "08.JPG",
        "09.JPG",
        "10.JPG",
        "11.JPG"
    ]

    function loadImage(path, num) {
        const newImg = document.createElement("img")
        newImg.src = path
        let canv1 = document.createElement('canvas')
        canv1.width =480
        canv1.height =320
        newImg.onload = () => {
            let ctx1 = canv1.getContext('2d')
            ctx1.drawImage(newImg, 0, 0)
            ctx1.font = "30px Arial"
            ctx1.fillStyle = 'rgba(0,0,0)'
            ctx1.fillText(num, 0, 315)
            const newImg1 = document.createElement("img")
            newImg1.src = ctx1.canvas.toDataURL('image/jpeg')
            var tr=document.createElement("tr")
            var xh=document.createElement("td")
            var image2 = document.createElement('img')
            image2.src = ctx1.canvas.toDataURL('image/jpeg')
            xh.appendChild(image2)
            tr.appendChild(xh)
            var tab=document.getElementById("image_div")
            tab.appendChild(tr)
        }
    }

    for (let i = 0; i < path_list.length; i++) {
        loadImage(path_list[i], i + 1)
    }
</script>

使用promise all可以实现顺序加载

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <style>
        * {
            margin: 0;
            padding: 0;
        }
    </style>
    <title>demo</title>
</head>
<body>
<div id="image_div" style="height:800px;overflow:scroll;">
    <table id="image_table">
    </table>
</div>
</body>
</html>
<script>
    let path_list = [
        "00.JPG",
        "01.JPG",
        "02.JPG",
        "03.JPG",
        "04.JPG",
        "05.JPG",
        "06.JPG",
        "07.JPG",
        "08.JPG",
        "09.JPG",
        "10.JPG",
        "11.JPG"
    ]

    function loadImage(path, num) {
        return new Promise(function (resolve, reject) {
            const newImg = document.createElement("img")
            newImg.src = path
            let canv1 = document.createElement('canvas')
            canv1.width = 480
            canv1.height = 320
            newImg.onload = () => {
                let ctx1 = canv1.getContext('2d')
                ctx1.drawImage(newImg, 0, 0)
                ctx1.font = "30px Arial"
                ctx1.fillStyle = 'rgba(0,0,0)'
                ctx1.fillText(num, 0, 315)
                const newImg1 = document.createElement("img")
                newImg1.src = ctx1.canvas.toDataURL('image/jpeg')
                resolve(newImg1)
            }
            newImg.onerror = () => {
                reject("加载错误")

            }
        })
    }
    let arr = []
    for (let i = 0;i < path_list.length; i++) {
        arr.push(loadImage(path_list[i], i + 1))
    }
    Promise.all(arr).then((values)=>{
        for (let v of values) {
            var tr=document.createElement("tr")
            var xh=document.createElement("td")
            xh.appendChild(v)
            tr.appendChild(xh)
            var tab=document.getElementById("image_table")
            tab.appendChild(tr)
        }
    })
</script>

标签:let,javascript,JPG,promise,path,ctx1,createElement,document,加载
From: https://www.cnblogs.com/zhouyang209117/p/17834170.html

相关文章

  • 理解与使用Javascript中的回调函数
     js里的解释:Acallbackisafunctionthatispassedasanargumenttoanotherfunctionandisexecutedafteritsparentfunctionhascompleted.    从字面上理解下来就是,回调就是一个函数的调用过程。假如函数a有一个参数,这个参数是个函数b,当函数a执行完......
  • JavaScript知识点
    JavaScript中的虚值constfalsyValues=["",0,null,undefined,NaN,false];简单的来说虚值就是是在转换为布尔值时变为false的值。如何检查值是否虚值使用Boolean函数或者!!运算符。usestrict"usestrict”是ES5特性,它使我们的代码在函数或整个脚本中处于严格模式。严格模式帮助......
  • 一个常见的 JavaScript 解构陷阱
    在日常的JavaScript编码中,我们经常使用解构语法来提取对象中的属性。假设我们有一个名为fetchResult的对象,代表从接口返回的数据,其中包含一个字段名为data。constfetchResult={data:null};在提取data字段时,为了避免接口未返回该字段而导致的问题,我们常常会使用......
  • JavaScript知识点
    JavaScript提供的异步模式1、回调函数(callbacks)2、事件监听3、Promise对象call、apply的区别call和apply都是改变this指向的方法,区别在于call可以写多个参数,而apply只能写两个参数,第二个参数是一个数组,用于存放要传的参数。call和apply的好处用call和apply实现更好的继承和扩展,更......
  • Unity-场景的异步加载
    Unity-场景的异步加载为什么需要异步加载​ 在诸多大型游戏里,场景渲染精度都是动态的,随着场景与角色距离的增加,渲染精度也在递减,这样极大的减少了硬件性能的消耗。​ 但如果角色使用了某些传送技能,将自己传送到为渲染的地点,游戏可能就会因为需要瞬间渲染大量的场景而卡顿。此时......
  • 前端学习-JavaScript学习-JavaScript高级程序设计-第2章笔记
    在HTML中使用JavaScript元素<script>元素元素属性MDN<script>:脚本元素属性使用状态描述charset可选、少用字符集defer可选、少用表示脚本可以延迟至文档完全被解析后实行,部分浏览器不支持language废弃编写代码使用的语言src可选包含要执行代码的......
  • JavaScript实现Date( ) ——日期格式化的三种常用方法
    Date()介绍Date()基本使用Date()日期对象是构造函数,必须使用new来调用我们的日期对象。若Date()没有参数时返回当前时间若Date(timer)有参数时返回参数设置的时间参数写法:'2012-2-208:54:32'(字符串)返回值格式:SunMay28202323:36:28GMT+0800(中国标准时间)......
  • JavaScript slice 方法用法与实例解析
    在JavaScript中,slice()是一个常用的数组方法,用于从现有数组中提取一部分元素,然后返回一个新的数组。它是一个非常有用的工具,可以帮助你在不改变原始数组的情况下操作数组的子集。本文将介绍slice()的基本概念、使用方法、实践案例和互动练习,以帮助你更好地理解和掌握这一功能......
  • WonderTrader 源码解析与改造-通用的dll加载器(未完待续)
    背景笔者学习WonderTrader的源码的一些心得体会,本文基于WonderTrader0.9.8,讲解其中的DLLHelper类先看它的应用1.wondertrader\src\TestTrader\main.cpp2.wondertrader\src\Includes\ITraderApi.h3.wondertrader\src\TraderCTP\TraderCTP.cpp......
  • JavaScript - js生成 txt 文件
    JavaScript-js生成txt文件/***方法定义*/functiondownload(filename,text){varelement=document.createElement('a');element.style.display='none';varcontent=encodeURIComponent(text);element.setAttribute('href&#......