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

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

在最后完成move.js后,之前的不同步的效果不能用這個實現了呢?

在完成最后的這個move.js后,我將之前的順序改變效果的代碼改成了這樣,但是只能完成第一個效果,是不是相當于已經實現了到目標,后面的就不執行了?怎么改呢?既能實現同步的也能實現不同步的?

Li.onmouseover = function(){

startMove(Li,{width:400},function(){

startMove(Li,{height:200},function(){

startMove(Li,{opacity:100});

});

});

}


正在回答

5 回答

startMove(Li,{"width":400},function(){?????????這里的width要加雙引號。。。

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

function moveStart(obj, json, fn) {

//json = {name:value}

//json要用for in 函數--->for(var i in json){ name==i; ?value == json[i] }

var flag = true; //假設所有運動都達到目標值

clearInterval(obj.timer);

// var aLi = document.getElementsByTagName("li");

//obj是實參傳來的this,所以這里不再需要獲取對象


obj.timer = setInterval(function() {

//1、獲取值

for (var attr in json) {

var icren = 0;


if (attr == "opacity") {

icren = Math.round(parseFloat(getStyle(obj, attr)) * 100);

} else {

icren = parseInt(getStyle(obj, attr));

} //2、計算速度

var speed = (json[attr] - icren) / 10;

speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);


//3、判斷是否達到目標

if (icren != json[attr]) {

// alert(flag);

flag = false;

// clearInterval(obj.timer);

}

else{

flag = true;

// alert(flag);

}

//for in 循環執行json時,是將json的屬性全部遍歷結束之后跳出循環

//4、執行計算


if (attr == "opacity") {

obj.style[attr] = (icren + speed) / 100;

obj.style[filter] = "alpha(opacity:" + (icren + speed) + ")";

} else {

obj.style[attr] = icren + speed + "px";

}

}

if (flag) {

alert("ok");

clearInterval(obj.timer);

if (fn) {

fn();

}

}


}, 30);

}


function getStyle(obj, attr) {

if (obj.currentStyle) {

return obj.currentStyle[attr];

} else {

return getComputedStyle(obj, false)[attr];

}

}


這樣就可以使用function(){}了,但是要是你傳入的obj的實參是this,function中不可以再傳入this,最好把this賦值給變量。以下是代碼:


<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title></title>

<style>

*{

margin: 0;

padding: 0;

}

li{

list-style: none;

width: 200px;

height: 100px;

background-color: goldenrod;

opacity: 0.3;

border: 2px solid black;

}

</style>

<script src="js/move.js" type="text/javascript" charset="utf-8"></script>

<script type="text/javascript">

window.onload = function(){

var oLi = document.getElementsByTagName("li");

// alert(oLi.length);

for(var i = 0;i<oLi.length;i++){

// alert("test");

oLi[i].timer = null;

oLi[i].onmouseover = function(){

var test = this;

moveStart(test,{width:202,height:200}

// ?==========?

// ?= moveStar(this,...)中,this不可以用oLi[i]這個對象????=

// ?==========?

,function(){

moveStart(test,{opacity:100});

}

);

}

oLi[i].onmouseout = function(){

moveStart(this,{width:200,height:100});

}

}

}

</script>

</head>

<body>

<li></li>

<li></li>

<li></li>

<li></li>

</body>

</html>


區域中的?號注釋塊是我也不太明白的地方,望高手解答

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

丿丫丫

可以用 但是必須先把li每個循環一遍再加上運動。。。this在這里指的是你當前所鼠標滑過的li
2015-04-11 回復 有任何疑惑可以回復我~
#2

七月小麥麥

能請問一下問什么不能再用this了嗎?
2015-06-18 回復 有任何疑惑可以回復我~

是的,我也發現了,正在分析,是由于flag一直是false,無法進入最后的判斷,對json了解不是很透徹。

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

七月小麥麥

求教,我還是沒能解決這個問題
2015-06-18 回復 有任何疑惑可以回復我~

遇到同樣問題 求指教

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

呵呵 學習了

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

想幸福像花兒一樣 提問者

?什么意思?
2015-01-16 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

在最后完成move.js后,之前的不同步的效果不能用這個實現了呢?

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

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

幫助反饋 APP下載

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

公眾號

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