介绍
这篇文章给大家分享的是有关javascript实现异步的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
javascript实现异步的方法:1、使用setTimeout方法;2、使用setImmediate方法;3、使用requestAnimationFrame方法;4、监听新形象加载状态;5、监听脚本加载状态方法。
引用>本教程操作环境:windows7多系统,javascript1.8.5版,戴尔G3电脑。
<强> javascript实现异步的方法:强>
<强> 1,setTimeout:这个是最简单的强>
setTimeout(,函数(){ ,,,console.log (1); }); console.log (2);<强> 2,setImmediate: IE10添加的新功能,专门用于解放ui线程.IE10以下及其他浏览器不支持强>
setImmediate(函数(){ ,,,console.log (1); }); console.log (2);<强> 3,requestAnimationFrame: HTML5和CSS3时代新产物,专门用于动画。低级浏览器不支持强>
var asynByAniFrame =,(函数(){ ,,,var _window =,窗口, ,,,frame =_window.requestAnimationFrame ,,,,,,,,,,,| |,_window.webkitRequestAnimationFrame ,,,,,,,,,,,| |,_window.mozRequestAnimationFrame ,,,,,,,,,,,| |,_window.oRequestAnimationFrame ,,,,,,,,,,,| |,_window.msRequestAnimationFrame; ,,,return 函数(,callback ),{,框架(,callback ),}; }) (); asynByAniFrame(函数(){ ,,,console.log (1); }) console.log (2);<强> 4,监听新形象加载状态:通过加载一个数据:图像数据格式的图片,并监听器加载状态实现异步。强>
尽管部分浏览器不支持数据:形象图片数据格式,但仍然可以触发其onerror状态实现异步,但IE8及以下对数据:图像数据格式的图片,onerror为同步执行
function asynByImg (, callback ), { ,,,var img =, new 图像(); ,,,img.onload =, img.onerror =, img.onreadystatechange =,()函数,{ ,,,,,,,img =, img.onload =,=, img.onerror img.onreadystatechange =,空; ,,,,,,,回调(),, ,,,} ,,,img.src =,“数据:图像/png,“; } asynByImg(函数(){ ,,,console.log (1); }); console.log (2);<强> 5,监听脚本加载状态强>
原理同新形象是一样的,生成一个数据:text/javascript的脚本,并监听其加载状态实现异步。
尽管部分浏览器不支持数据:text/javascript格式数据的脚本,但仍然可以触发其onerror, onreadystatechange事件实现异步。
var asynByScript =,(()函数,{ ,,,var _document =,文档, ,,,,,,,_body =, _document.body, ,,,,,,,_src =,“数据:text/javascript,“ ,,,,,,,//异步队列 ,,,,,,,queue =, []; ,,,return 函数(,callback ), { ,,,,,,,,,,,var script =, _document.createElement (“script"); ,,,,,,,,,,,,,=,script.src  _src; ,,,,,,,,,,,//添加到队列 ,,,,,,,,,,,队列[,queue.length ],=,回调; ,,,,,,,,,,,script.onload =, script.onerror =,=, script.onreadystatechange function (), { ,,,,,,,,,,,,,,,script.onload =, script.onerror =,=, script.onreadystatechange 零; ,,,,,,,,,,,,,,,_body.removeChild (, script ); ,,,,,,,,,,,,,,,script =,空; ,,,,,,,,,,,,,,,//执行并删除队列中的第一个 ,,,,,,,,,,,,,,,queue.shift () (); ,,,,,,,,,,,}; ,,,,,,,,,,,_body.appendChild (, script ); ,,,,,,,} ,,,})(); asynByScript(,函数(){ ,,,console.log (1); },); nulljavascript实现异步的方法