亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

請問為什么動畫效果在首次運行完ball1,ball2,ball3后再繼續運行就沒反應了~我明明加上了二次運行ball1,ball2,ball3啊!

<!doctype>

<!DOCTYPE html>

<html>

<head>

<title>promise animation</title>

<style type="text/css">

.ball{

width: 40px;

height: 40px;

border-radius: 20px;

}

.ball1{

background-color: red;

}

.ball2{

background-color: yellow;

}

.ball3{

background-color: green;

}

</style>

<script type="text/javascript" src="./node_modules/bluebird/js/browser/bluebird.js"></script>

</head>

<body>

<div class="ball ?ball1" style="margin-left: 0px;"></div>

<div class="ball ?ball2" style="margin-left: 0px;"></div>

<div class="ball ?ball3" style="margin-left: 0px;"></div>

<script type="text/javascript">

var ball1=document.querySelector('.ball1')

var ball2=document.querySelector('.ball2')

var ball3=document.querySelector('.ball3')


// function animate(ball,distance,cb){

// setTimeout(function(){

// var marginLeft=parseInt(ball.style.marginLeft,10)


// if(marginLeft === distance){

// cb && cb()

// }else if (marginLeft<distance) {

// marginLeft++

// }else{

// marginLeft--

// }

// ball.style.marginLeft=marginLeft + 'px'

// animate(ball,distance,cb)

// },13)

// }


// animate(ball1,100,function(){

// animate(ball2,200,function(){

// animate(ball3,300,function(){

// animate(ball3,150,function(){

// animate(ball2,150,function(){

// animate(ball1,150,function(){

// })

// })

// })

// })

// })

// })

var Promise = window.Promise


function promiseAnimate(ball,distance){

return new Promise(function(resolve,reject){

function _animate(){

setTimeout(function(){

var marginLeft=parseInt(ball.style.marginLeft,10)


if(marginLeft === distance){

resolve()

}else if (marginLeft<distance) {

marginLeft++

}else{

marginLeft--

}

ball.style.marginLeft=marginLeft + 'px'

_animate()

},13)

}

_animate()

})

}


promiseAnimate(ball1,100)

.then(function(){

return promiseAnimate(ball2,200)

})

.then(function(){

return promiseAnimate(ball3,300)

})

.then(function(){

return promiseAnimate(ball3,150)

})

.then(function(){

return promiseAnimate(ball2,150)

})

.then(function(){

return promiseAnimate(ball1,150)

})

</script>

</body>

</html>

http://img1.sycdn.imooc.com//5804643100013f1515630847.jpg

正在回答

2 回答

我也不是很理解,難道第一個球跑到位置了,沒有對其釋放,然后又一次執行到這個任務了,就會發生兩個任務在競爭,最后一直卡在這個timer里面沒出來?

0 回復 有任何疑惑可以回復我~

按照你的寫法做了修改,因為當小球的margin-left不等于傳參distance時,需要調用_animate方法讓小球執行動畫

if(marginLeft === distance){

resolve()

}else if (marginLeft<distance) {

marginLeft++

ball.style.marginLeft=marginLeft + 'px'

_animate()

}else{

marginLeft--

ball.style.marginLeft=marginLeft + 'px'

_animate()

}


0 回復 有任何疑惑可以回復我~
#1

Conqueror1st

寫在外面為什么就調用不了?else結束之后不是也一樣調用么
2017-03-02 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
進擊Node.js基礎(二)
  • 參與學習       76735    人
  • 解答問題       242    個

本教程帶你攻破 Nodejs,讓 JavaScript流暢運行在服務器端

進入課程

請問為什么動畫效果在首次運行完ball1,ball2,ball3后再繼續運行就沒反應了~我明明加上了二次運行ball1,ball2,ball3啊!

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號