Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 混合程序和事件_Javascript_Events_Procedure - Fatal编程技术网

Javascript 混合程序和事件

Javascript 混合程序和事件,javascript,events,procedure,Javascript,Events,Procedure,我有一个函数,可以加载图像并检查它是否成功加载。(查看浏览器是否支持WebP) 问题是,我必须为此使用onload()和onerror(),这意味着我不能简单地返回一个值 我如何延迟返回,直到事件触发? 这是我的密码: function start_check_webp(){ var div = document.createElement('div'); div.innerHTML = '<img id = "test_image" src="test_image.webp"&g

我有一个函数,可以加载图像并检查它是否成功加载。(查看浏览器是否支持WebP)

问题是,我必须为此使用onload()和onerror(),这意味着我不能简单地返回一个值

我如何延迟返回,直到事件触发?

这是我的密码:

function start_check_webp(){
  var div = document.createElement('div');
  div.innerHTML = '<img id = "test_image" src="test_image.webp">';
  webp_test = div.firstChild;
  div.firstChild.onerror = function(){support_webp = false}
  div.firstChild.onload = function(){support_webp = true}
}
function start\u check\u webp(){
var div=document.createElement('div');
div.innerHTML='';
webp_测试=第一个孩子;
div.firstChild.onerror=function(){support\u webp=false}
div.firstChild.onload=function(){support\u webp=true}
}

你不能。您需要重新构造代码以处理异步事件。不需要让事件处理程序设置变量,您可以让它们调用一个函数,该函数在支持WebP或其他情况下实际执行某些操作。

构建代码,以便在加载映像后运行。您可以通过使用数据URI而不是外部图像来加快进程

function testWepP() {
  var webP = new Image();     
  webP.src = 'data:image/webp;base64,UklGRjoAAABXRUJQVlA4IC4AAACyAgCdASoCAAIAL' + 
    'mk0mk0iIiIiIgBoSygABc6WWgAA/veff/0PP8bA//LwYAAA';
  webP.onload = webP.onerror = function () {
     callback(webP.height === 2);     
  }; 
};

testWebP(function(supported) {
  console.log((supported) ? "webP supported!" : "webP not supported."); 
});

好吧这是我的另一个选择,但我更喜欢获得“是\否”值。只是检查一下,如果不使用事件,就无法确定映像加载是否失败,是吗?@snostorm:很遗憾,不是。浏览器需要首先从服务器加载映像,这必然会使其异步。(JavaScript中没有阻塞调用。)