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

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

請問我的為什么實現不了?

<!Doctype html>

<html>

<head>

? <meta charset="utf-8">

? <title>js透明度變化</title>

? <style>

? ? div{width:200px;height:200px;background:#0f0;opacity:0.2;}

? </style>

</head>

<body>

<script> ?

? var newdiv=document.createElement("div");

? document.body.appendChild(newdiv);

? var timer=null;

? newdiv.onmouseover=function(){

?fadeToogle(1);

? }

? newdiv.onmouseout=function(){

?fadeToogle(0.2);

? }

? function fadeToogle(iTarget){

?if(timer){

?clearInterval(timer);

?}

?timer=setInterval(function(){

var speed;

if(newdiv.style.opacity>iTarget){

speed=-0.05;

}

if(newdiv.style.opacity<iTarget){

speed=0.05;

}

if(newdiv.style.opacity==iTarget){

? ?clearInterval(timer);

? ?}else{

? ?newdiv.style.opacity+=speed;

? ?}

?},30)

? }

</script>

</body>

</html>


正在回答

3 回答

原諒我根本沒看到你的div在哪里??

我不敢相信你前面的都學會了??

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

小幸運17

我收回我的回答,我看錯了。sorry
2016-07-22 回復 有任何疑惑可以回復我~

這個用jQuery的toggleClass就簡單了,可以看一下


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

簡單看了下,代碼的邏輯是通過JS創建個DIV,插入到body中,然后希望鼠標移入時透明度變為1,移出時再把透明度變回來,但此代碼有幾個致命錯誤,反映出樓主要對基本概念的理解要加強。

1、通過創建插入的方法沒有錯,但是,這個時候創建的這個div有沒有opacity屬性呢?由newdiv.style.opacity可看出,樓主希望通過這個方法來獲取div的opacity屬性。但是,這個對象本身并沒有這個屬性啊,原因是樓主并沒有通過newdiv.setAttribute來設置這個opacity屬性。樓主可能認為在樣式表中寫了opacity:0.2,沒錯,但那并不是newdiv這個對象的屬性,別忘了,js中一切都是對象,沒有的屬性怎么得到?由對象的概念來解釋newdiv.style.opacity就是newdiv對象的style屬性下的opacity屬性,此時的newdiv沒有這個屬性。一句話總結:newdiv.style.opacity獲取的是行間樣式,并不能取到樣式表中的值,原回很簡單,也很基礎,就是對對象的理解要到位。

2、if(timer){clearInterval(timer)},樓主希望通過些判斷來清除計時器來達到清除定時器的效果。但事實上是清除不掉的。重申一遍,js里一切都是對象,函數也不例外,對于對象的引用僅僅是指針的引用。那么移入時的過程就是:指向匿名函數,調用fadeToggle函數時指針指向它,以后的過程都一樣。進入fadeToggle函數時判斷timer變里的布爾類型,首次是null,然后給他賦值了一個計時器,關鍵的是,計時器是什么?沒錯,是對象,那么全局變量對他的引用就是一個地址的引用,再次進入時企圖判斷timer的布爾類型清掉計時器,那么這時候清掉的是什么?僅僅是一個指針,而原來作用域鏈上的計時器并沒有被清掉,所以在控制臺里查看時,timer的個數(也就是計時器的個數)總是隨鼠標移入移出的次數而增加。

3、理解了上面基本上也就能找到解決方案了,還有一個地方也要注意下,就是函數作用域鏈的問題。鼠標移入時觸發了一個匿名函數,匿名函數又調用fadeToggle函數,fadeToggle函數中又有一個定時器,定時器里還有一個匿名函數,這一系列的函數串在一起就是形成了一個作用域鏈,這個作用域鏈并沒有因為鼠標的移出而銷毀掉,因為計時器里的匿名函數始終在被引用,所以不可能銷毀,除非我們將這個計時器給清掉,注意一定是清掉此條作用域鏈下的計時器。

聲明,本人也是一個初學者,有不當之處還請指點!開始也是看視頻練這些東西,但后來發現基礎的原理不掌握實在是舉步難行,所以放棄學這些,拿著書看原理,看完原理的東西再看這些一切都變得如此簡單,說來說去就那么點東西,雖然這段代碼并沒有親自實驗

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

Alphonse丿 提問者

newdiv是這個div的什么屬性?還是什么
2016-06-23 回復 有任何疑惑可以回復我~
#2

幽雪孤狐 回復 Alphonse丿 提問者

.....newdiv是document.createElement的一個實例化對象
2016-06-23 回復 有任何疑惑可以回復我~
#3

幽雪孤狐 回復 Alphonse丿 提問者

哥們,真的建議要看一下書。打個比方,理論核心是內功,框架,模板,視頻教程都是招式,招式再厲害沒有內功打底很容易迷茫。就像虛竹,沒有無涯子的內功前就是一坨,有了內功后學任何招式都很簡單。不要學鳩摩智,只會少林72絕技的招式,而沒有少林內功的驅動最終只能走火入魔。
2016-06-23 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

請問我的為什么實現不了?

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

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

幫助反饋 APP下載

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

公眾號

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