使用 onload 给改边图片宽高无效

2021-09-01 11:53:59 +08:00
 aglsv

async function setLatexSize(arr_latexImg, fontSize) {
        for (let i = 0;i< arr_latexImg.length;i++){
            let newImg = new Image()
            newImg.src = arr_latexImg[i].src
            await new Promise((resolve) => {
                newImg.onload = function() {
                    arr_latexImg[i].height = fontSize * newImg.height / 16
                    arr_latexImg[i].width = fontSize * newImg.width / 16
                    arr_latexImg[i].setAttribute('width', fontSize * newImg.width / 16);
                    arr_latexImg[i].setAttribute('height', fontSize * newImg.height / 16);
                    resolve()
                }
            })
        }
    }

我想跟踪字号的改变来设置图片的宽高,通过 for 循环遍历每一个 img 元素,之后通过 onload 里面来设置 img 元素的宽高,但是现在的问题是当我 console 出arr_latexImg[i]的时候,他标签上面是有宽高属性的,但是我页面中的元素本身依旧是原来的样子,没有变化

上面是页面中的元素标签,下面的图是我在 console 中显示的arr_latexImg[0]arr_latexImg[0]中的属性是设置上了,但是元素本身依旧没有, arr_latexImg这个数组是通过 jq 获取元素,完了 each 一个新的数组,r 这个数组就是给我传的arr_latexImg,下面是压缩后的代码。我想知道目前的问题是在哪块,是我方法哪块写的有问题吗

t = $("div.table").children().find("img.hex-exe-img"),
                        r = [];
                        $.each(t, function(e, n) {
                            r.push(t[e])
                        }),


2083 次点击
所在节点    JavaScript
23 条回复
aglsv
2021-09-01 17:28:30 +08:00
@Summerdx404 看了一下 img.height 设置的就是 img 的 height 属性,是我知识浅薄了
autoxbc
2021-09-01 20:12:52 +08:00
@aglsv #20 在第一次设置时把原始值保存起来,以后就可以直接读取了。这个保存位置可以是元素上的自定义属性,也可以是一个全局有效的 Map
aglsv
2021-09-02 14:54:33 +08:00
@autoxbc ok,多谢了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/799227

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX