在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ JS如何同步阻塞地加載圖片

JS如何同步阻塞地加載圖片

問題描述

如果我們加載一張圖片的時(shí)候,我們常常會(huì)寫:

let image = new Image();
image.onload = () => {
    // deal with downloaded image
};
image.src = path;

但是這樣的的過程顯然是異步回調(diào)的。請問在用原生js的前提下,有沒有同步阻塞的寫法呢?

更新

有人問問題背后的問題,嗯……問題背后當(dāng)然是有問題的,要不然我也不會(huì)費(fèi)這么大力氣同步。
我在用webgl寫渲染,隨著demo越來越大,代碼也變得越來越丑陋。于是就想著封裝。

假如一個(gè)場景中有一個(gè)物體Car,那么我希望代碼可以簡答粗暴地寫成如下的樣子:

let car = new Car();

function render() {
    car.draw();
    requestAnimationFrame(render);
}

requestAnimationFrame(render);

但是這就要求在Car類內(nèi)部需要處理好所有的加載問題。

class Car {
    constructor() {
        // load shader
        // load texture
    }
    draw() {
        // use shader and texture to render
    }
}

在構(gòu)造函數(shù)中加載,而draw依賴于構(gòu)造函數(shù)中加載的完成??梢钥紤]用Promise,但是很慚愧我對Promise這一套還不甚熟悉。而且很不確定是否能和webgl混在一起用。
如果有人了解的話并回答的話,非常感謝!

回答
編輯回答
孤島

你在onload調(diào)起的之后再new Image不就行了

2017年1月29日 04:30
編輯回答
不將就

后來,題主重構(gòu)代碼時(shí),選擇在一開始用Promise并發(fā)加載所有素材,然后再開始渲染,之后的邏輯就全部串行做。

2017年3月23日 16:55
編輯回答
解夏

用XHR自己阻塞地下載圖片, 下載后從blob生成data uri或blob url, 設(shè)置上去

其實(shí)沒有什么好處..

2017年3月17日 13:23
編輯回答
玄鳥

貌似沒有 可以用同步的ajax獲取圖片的數(shù)據(jù)后賦值給img試試 但是 為什么要同步的呢?

2017年5月5日 08:58
編輯回答
扯不斷

遞歸啊...

2018年7月24日 00:17