本文通过实例代码给大家介绍了JS 中使用Promise 实现红绿灯效果,在文中给大家介绍了一个promise用法例子,需要的朋友可以参考下,希望能帮助到大家。

要求使用promise 实现红绿灯颜色的跳转

绿灯执行三秒后

黄灯执行四秒后

红灯执行五秒

html 实现如下:

定义一个空类,之后再js中操作对应的类名即可实现相关的效果。

CSS实现如下:ul {

position: absolute;

width: 200px;

height: 200px;

top: 50%;

left: 50%;

transform: translate(-50%,-50%);

}

/*画3个圆代表红绿灯*/

ul >li {

width: 40px;

height: 40px;

border-radius:50%;

opacity: 0.2;

display: inline-block;

}

/*执行时改变透明度*/

ul.red >#red,

ul.green >#green,

ul.yellow >#yellow{

opacity: 1.0;

}

/*红绿灯的三个颜色*/

#red {background: red;}

#yellow {background: yellow;}

#green {background: green;}

javascript原理:

promise函数为一个异步操作函数,在函数运行结束时可以使用then()方法。我们再在promise函数内部设置延迟执行即可实现。

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' //严格模式

console.log("绿灯"+new Date().getSeconds()) //绿灯执行三秒

traffic.className = 'green';

green()

.then(function(){

console.log("黄灯"+new Date().getSeconds()) //黄灯执行四秒

traffic.className = 'yellow';

return yellow();

})

.then(function(){

console.log("红灯"+new Date().getSeconds()) //红灯执行五秒

traffic.className = 'red';

return red();

}).then(function(){

restart()

})

})();

Demo 请 点击这里!

ps:下面看一个Promise用法例子

注意:要想then方法能链式的执行下去,必须返回Promise对象!!!'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);

});

}

// 每次执行随机等待n毫秒,结果统计总毫秒数

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);

// });

// 等价与上面写法

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);

});

Ball move

.ball {

width: 40px;

height: 40px;

border-radius: 20px;

margin-left: 10px;

}

.ball1 {

background: #ff0000;

}

.ball2 {

background: #00ff00;

}

.ball3 {

background: #0000ff;

}

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);

});

相关推荐:

php模拟红绿灯,JS 中使用Promise 实现红绿灯详解相关推荐

  1. php模拟红绿灯,JS 中使用Promise 实现红绿灯实例代码(demo)

    本文通过实例代码给大家介绍了JS 中使用Promise 实现红绿灯效果,在文中给大家介绍了一个promise用法例子,不了解js中如何使用Promise的朋友可以参考下本篇文章 要求使用promise ...

  2. js中toString()和String()区别详解

    转载自  js中toString()和String()区别详解 我们知道String()与 .toString()都是可以转换为字符串类型,但是String()与 .toString()的还是有区别的 ...

  3. vue在created调用点击方法_vue.js中created方法的使用详解

    这次给大家带来vue.js中created方法的使用详解,使用vue.js中created方法的注意事项有哪些,下面就是实战案例,一起来看一下. 这是它的一个生命周期钩子函数,就是一个vue实例被生成 ...

  4. JS中的日期和时间详解

    JS中的日期和时间详解 关于Date()构造函数 简单实例 用Date()构造函数创建时钟 关于Date()构造函数 Date()构造函数是javascript的核心语言部分,用来创建表示时间和日期的 ...

  5. js中的preventDefault与stopPropagation详解(转)

    先讲解一下js中preventDefault和stopPropagation两个方法的区别: preventDefault方法的起什么作用呢?我们知道比如<a href="http:/ ...

  6. js中转换json对象方法详解及使用案例

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.因为采用独立于语言的文本格式,也使用了类似于C语言家族的习惯,拥有了这些特性使使JSON称为理想的数据交换语 ...

  7. js中的迭代器与生成器(详解)

    目录 一,迭代器 1.迭代器概念 2.迭代器的基本应用 3.迭代器原理 4.应用:自定义遍历数据 二,生成器 1.生成器概念 2.生成器的基本应用 3.yield表达式的值 4.应用:模拟获取数据 三 ...

  8. 5、this调用语句必须是构造函数中的第一个可执行语句_ES6中的Promise和Generator详解...

    简介 ES6中除了上篇文章讲过的语法新特性和一些新的API之外,还有两个非常重要的新特性就是Promise和Generator,今天我们将会详细讲解一下这两个新特性. Promise 什么是Promi ...

  9. AngularJS 中的Promise --- $q服务详解

    先说说什么是Promise,什么是$q吧.Promise是一种异步处理模式,有很多的实现方式,比如著名的Kris Kwal's Q还有JQuery的Deffered. 什么是Promise 以前了解过 ...

最新文章

  1. 剑指offer:面试题04. 二维数组中的查找
  2. pmbook 知识领域 第六版_PMP项目管理10大知识领域脑图
  3. idea 代码第一次上传git_如何使用IDEA将项目代码首次上传至GitHub,并持续推送?...
  4. java与.net平台之间进行RSA加密验证
  5. 一款社区论坛小程序源码(修复登录图片发布上传问题)
  6. 初学者指南:服务器基本技术名词
  7. Python爬虫入门六之Cookie的使用
  8. 静态化 - 真静态技术
  9. THREEJS - 获取场景中模型数据
  10. vscode配置c++11
  11. html5期末大作业:基于html+css+javascript+jquery+bootstarp响应式图书电商HTML模板网上书店(25页)
  12. python财务预算分析_从审计转到财务分析是怎样一种体验?
  13. 2021年中国研究生数学建模竞赛B题——空气质量预报二次建模
  14. [NOI2010] 航空管制
  15. iPhone 导入照片显示时间不是拍摄时间
  16. 电视为何降价至200元依然没人买?爱奇艺给出了答案
  17. 给定平面上任意三个点的坐标(x1​,y1​)、(x2​,y2​)、(x3​,y3​),检验它们能否构成三角形。
  18. Oracle Database Instant Client
  19. linux服务器配置和管理,Linux服务器配置和管理:一般管理
  20. 电商数仓(dwd 层)

热门文章

  1. Home键改了 iPhone 7该如何进入DFU模式
  2. 腾讯云公布5G产品矩阵,年底前交付300个边缘计算中心
  3. 为什么网络慢直播如此火热?只通过摄像头设备可以实现慢直播吗?
  4. 远程安装无法退出电脑管家
  5. S7-PLCSIM Advanced分布式通讯
  6. 【WPS】使用JS宏进行合并表
  7. win10下载安装phpStudy+phpMyAdmin
  8. 计算机文件不能复制到u盘,复制文件不能到U盘的原因
  9. 头像生成器微信小程序代码
  10. 谷歌乳腺癌Detecting Cancer Metastases on Gigapixel Pathology Images