国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開(kāi)發(fā) > JS > 正文

JS 中使用Promise 實(shí)現(xiàn)紅綠燈實(shí)例代碼(demo)

2024-05-06 16:40:26
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

要求

  • 使用promise 實(shí)現(xiàn)紅綠燈顏色的跳轉(zhuǎn)
  • 綠燈執(zhí)行三秒后
  • 黃燈執(zhí)行四秒后
  • 紅燈執(zhí)行五秒

html 實(shí)現(xiàn)如下:

js;"><ul id="traffic" class=""> <li id="green"></li> <li id="yellow"></li> <li id="red"></li></ul>

定義一個(gè)空類,之后再js中操作對(duì)應(yīng)的類名即可實(shí)現(xiàn)相關(guān)的效果。

CSS實(shí)現(xiàn)如下:

ul { position: absolute; width: 200px; height: 200px; top: 50%; left: 50%; transform: translate(-50%,-50%);} /*畫(huà)3個(gè)圓代表紅綠燈*/ ul >li {  width: 40px;  height: 40px;  border-radius:50%;  opacity: 0.2;  display: inline-block; } /*執(zhí)行時(shí)改變透明度*/ ul.red >#red,  ul.green >#green, ul.yellow >#yellow{  opacity: 1.0; } /*紅綠燈的三個(gè)顏色*/ #red {background: red;} #yellow {background: yellow;} #green {background: green;}

javascript原理:

promise函數(shù)為一個(gè)異步操作函數(shù),在函數(shù)運(yùn)行結(jié)束時(shí)可以使用then()方法。我們?cè)僭趐romise函數(shù)內(nèi)部設(shè)置延遲執(zhí)行即可實(shí)現(xiàn)。

js 代碼如下:

function timeout(timer){  return function(){    return new Promise(function(resolve,reject){   setTimeout(resolve,timer)    })    }  } var green = timeout(3000); var yellow = timeout(4000); var red = timeout(5000); var traffic = document.getElementById("traffic"); (function restart(){  'use strict'      //嚴(yán)格模式  console.log("綠燈"+new Date().getSeconds()) //綠燈執(zhí)行三秒   traffic.className = 'green';  green()  .then(function(){   console.log("黃燈"+new Date().getSeconds()) //黃燈執(zhí)行四秒   traffic.className = 'yellow';   return yellow();  })  .then(function(){   console.log("紅燈"+new Date().getSeconds()) //紅燈執(zhí)行五秒   traffic.className = 'red';   return red();  }).then(function(){   restart()  })  })();

Demo 請(qǐng) 點(diǎn)擊這里!

ps:下面看一個(gè)Promise用法例子

注意:要想then方法能鏈?zhǔn)降膱?zhí)行下去,必須返回Promise對(duì)象!!! 

'use strict';  function async(value) {   return new Promise(function(resolve, reject) {     var ms = Math.round(Math.random() * 1000);     setTimeout(function() {       console.log('waiting ' + ms + 'ms');       // 等待ms毫秒       resolve(value + ms);     }, ms);   }); } // 每次執(zhí)行隨機(jī)等待n毫秒,結(jié)果統(tǒng)計(jì)總毫秒數(shù) async(0) .then(async) .then(async) .then(async) .then(async) .then(function(value) {   console.log('------total wait:' + value + 'ms'); }); //////////////////////////////////////////////////////////// function async1(value) {   return new Promise(function(resolve, reject) {     resolve(value + 1);   }); } function async2(value) {   // return new Promise(function(resolve, reject) {   //   resolve(value + 2);   // });   // 等價(jià)與上面寫(xiě)法   return Promise.resolve(value + 2); } function async3(value) {   return new Promise(function(resolve, reject) {     resolve(value + 3);   }); } async1(100).then(async2).then(async3).then(function(value) {   console.log('------' + value); }); ///////////////////////////////////////////////////////////////// function say() {   var value = 'what';   return Promise.resolve(value); } say().then(function(value) {   value = value + ' are';   return Promise.resolve(value); }).then(function(value) {   value = value + ' you';   return Promise.resolve(value); }).then(function(value) {   value = value + ' doing';   return Promise.resolve(value);   //return Promise.reject('error, exit'); // 中途退出 }).then(function(value) {   value = value + ' now!';   return Promise.resolve(value); }).then(function(value) {   console.log('------' + value); }).catch(function(error) {   console.log('------' + error); }); <html> <head>   <title>Ball move</title>   <style type="text/css">     .ball {       width: 40px;       height: 40px;       border-radius: 20px;       margin-left: 10px;     }     .ball1 {       background: #ff0000;     }     .ball2 {       background: #00ff00;     }     .ball3 {       background: #0000ff;     }   </style>   <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script> </head> <body>   <div class="ball ball1"></div>   <div class="ball ball2"></div>   <div class="ball ball3"></div>   <script type="text/javascript">     function moving(ball, pos) {       return new Promise(function(resolve, reject) {         var marginLeft = parseInt(ball.css('margin-left'));         if (marginLeft != pos) {           var timerId = setInterval(function() {             marginLeft = marginLeft + 1;             ball.css('margin-left', marginLeft);             if (marginLeft == pos) {               clearInterval(timerId);               resolve();             }           }, 20);         } else {           resolve();         }       });     }     moving($('.ball1'), 100).then(function() {       return moving($('.ball2'), 150);     }).then(function() {       return moving($('.ball3'), 200);     });   </script> </body> </html> 

 

總結(jié)

以上所述是小編給大家介紹的JS 中使用Promise 實(shí)現(xiàn)紅綠燈實(shí)例代碼(demo),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)VeVb武林網(wǎng)網(wǎng)站的支持!


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到JavaScript/Ajax教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 新乡市| 漾濞| 长兴县| 荔波县| 正定县| 车致| 平陆县| 双城市| 长丰县| 博乐市| 冷水江市| 泉州市| 资兴市| 屯留县| 富锦市| 北票市| 新营市| 拜城县| 河南省| 乌兰县| 兰西县| 湖南省| 陵川县| 乃东县| 紫金县| 四会市| 奈曼旗| 长春市| 肃宁县| 东海县| 随州市| 梓潼县| 龙门县| 定远县| 冀州市| 徐闻县| 报价| 柏乡县| 赤城县| 巴彦淖尔市| 嵊州市|