2017-04-13 22 views
0

here我学会了如何检查图像是否可用。如何在img.onload函数中设置变量

但我有一个问题。我有一个变量,我会根据id设置她的值,图像是否可用。

例如,我有这样的:

app.checkImage = function (imageSrc, good, bad) { 
    var img = new Image(); 
    img.onload = good; 
    img.onerror = bad; 
    img.src = imageSrc; 
} 

我有一个应用程序对象是这样的:

var app = { 
    offlineChecked: false, 
    offline: false, 
    }; 

内的另一个功能,我有这样的代码:

if(app.offlineChecked == true) 
     { 
     //don't do nothing 
     } 
     else 
     { 
     app.checkImage("https://mysite" + data.image_150, 
      function(){ app.offline = false; }, 
      function(){ app.offline = true; }); 
     app.offlineChecked = true; 
     } 

但这不起作用。 app.offline始终为false,以防图像不可用并触发img.onerror。

编辑 - 我读之后的代码上市app.offline值,如下位置:

if(app.offlineChecked == true) 
{ 
     //don't do nothing 
} 
else 
{ 
    app.checkImage("https://mysite" + data.image_150, 
     function(){ app.offline = false; }, 
     function(){ app.offline = true; }); 
    app.offlineChecked = true; 
} 
if(app.offline == true) 
{ 
    console.log('offline'); 
} 
else 
{ 
    console.log('online); 
} 
+0

如何,什么时候检查app.offline的价值? –

+0

我编辑了我的第一篇文章!感谢您的关注! – bobc82

+0

[为什么我的变量在函数内部修改后没有改变? - 异步代码引用](http://stackoverflow.com/questions/23667086/why-is-my-variable-unaltered-after-i-modify-it-inside-of-a-function-asynchron) – JJJ

回答

0

我找到解决方案here

这解决了我的问题。我写的解决方案就可以了:

app.checkImage = function(imageSrc, imageChecked) 
{ 
    var img = new Image(); 
    img.onload = function(){ 
    app.offline = false; 
    imageChecked(app.offline); 
    } 
    img.onerror = function(){ 
    app.offline = true; 
    imageChecked(app.offline); 
    } 
    img.src = imageSrc; 
} 

app.offline变量是在回调函数设置如下:

if(app.offlineChecked == true) 
{ 
    /**Other operations here if app is offline or not*/ 
} 
else 
{ 
    app.checkImage("https://mysite" + data.image_150, function(offline) 
    { 
     app.offline = offline; 
     if(app.offline == true) 
     { 
     console.log('offline'); 
     } 
     else 
     { 
     console.log('online'); 
     } 
     app.offlineChecked = true; 
    }); 
} 
1

问题,即功能的onerror火灾多晚,比你尝试检查它。 试试这个例子

var app = { 
    offlineChecked: false, 
    offline: false 
}; 

var ready = false; 

app.checkImage = function (imageSrc, good, bad, onready) { 
    var img = new Image(); 
    img.onload = good; 
    img.onerror = bad; 
    img.src = imageSrc; 
    img.onreadystatechange = onready; 
}; 

if (app.offlineChecked == true) { 
    //don't do nothing 
} 
else { 
    app.checkImage("https://mysite", 
     function() { 
      app.offline = false; 
     }, 
     function() { 
      app.offline = true; 
      alert(app.offline); 
      ready =true; 
     }); 
    app.offlineChecked = true; 
} 


setInterval(function() { 
    if (ready) { 
     alert(app.offline); 
    } 
}, 1000); 

img.onload当脚本加载与否,它运行的onload或的onerror img.onerror本身表现为回调。当您尝试检查它时,错误功能尚未启动