明月松間照 清泉石上流


                                                  ——— 兵臨城下   貓科動物
          posts - 70, comments - 137, trackbacks - 0, articles - 23
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          又是JS的問題!最近研究中……

          Posted on 2006-08-05 14:48 兵臨城下 閱讀(771) 評論(7)  編輯  收藏 所屬分類: JavaScript

          ?????????最近想實(shí)現(xiàn)一個圖片的漸顯漸無的JS程序,就是鼠標(biāo)移到上面圖片逐漸清晰,鼠標(biāo)移走圖片逐漸消失。有點(diǎn)問題向大家請教。
          ?????????相關(guān)代碼如下:
          ????????圖片代碼:?<img src="liuting.jpg" width="339" height="450" onmouseover="high(this)" onmouseout="low(this)" style="FILTER: alpha(opacity=15)"/>
          ?????????JS方法:
          ?????????function high(imgHigh){
          ??????????????high = imgHigh;
          ??????????????if(typeof(lowlighting) != "undefined") clearInterval(lowlighting);
          ??????????????highlighting=setInterval("highlightit(high)",100);
          ?????????}

          ?????????function low(imgLow){
          ???????????????low=imgLow;
          ???????????????clearInterval(highlighting);
          ????????????????lowlighting = setInterval("lowLight(low)",100);
          ?????????}

          ?????????function highlightit(img){
          ?????????????if(img.filters.alpha.opacity < 200) {
          ??????????????img.filters.alpha.opacity += 5;
          ?????????????}
          ?????????????//else if (window.highlighting)
          ??????????????//clearInterval(highlighting);
          ?????????}
          ?????????function lowLight(img) {
          ?????????????if(img.filters.alpha.opacity > 15)
          ????????????????????img.filters.alpha.opacity -= 5;
          ?????????????//else if (window.lowlighting)
          ??????????????//clearInterval(lowlighting);
          ?????????}
          ?????????網(wǎng)頁打開后,第一次鼠標(biāo)移上去漸清晰,移走后也正常逐漸消失,都很正常。可當(dāng)我再次把鼠標(biāo)移到圖片上時,就沒有反應(yīng)了,在移出圖片時JS報(bào)錯,說在<img />那行,對象不支持此屬性或方法。
          ????????調(diào)了好久也沒成功,特來向大家請教!


          評論

          # re: 又是JS的問題!最近研究中……  回復(fù)  更多評論   

          2006-08-05 19:52 by hahahehe
          問題出在你第二次把鼠標(biāo)移動上去時你的high和low早已經(jīng)不是函數(shù)了,你看看你做了什么,high = imgHigh;low=imgLow;你的函數(shù)變成了image對象,當(dāng)然會出錯,你改一下
          function high(imgHigh){
          haha = imgHigh;
          if(typeof(lowlighting) != "undefined") clearInterval(lowlighting);
          highlighting=setInterval("highlightit(high)",100);
          }

          function low(imgLow){
          hehe = imgLow;
          clearInterval(highlighting);
          lowlighting = setInterval("lowLight(low)",100);
          }
          這樣應(yīng)該ok了

          # re: 又是JS的問題!最近研究中……  回復(fù)  更多評論   

          2006-08-05 19:54 by hahahehe
          噢,沒改完
          highlighting=setInterval("highlightit(haha)",100);

          lowlighting = setInterval("lowLight(hehe)",100);

          # re: 又是JS的問題!最近研究中……  回復(fù)  更多評論   

          2006-08-06 18:16 by 兵臨城下
          hahahehe!多謝了,幾次問題都是在你的幫助下得以解決,學(xué)到不少東西!
          以后有問題一定向你請教!

          # re: 又是JS的問題!最近研究中……  回復(fù)  更多評論   

          2006-08-06 18:46 by 兵臨城下
          在hahahehe提醒后,覺得是有點(diǎn)問題。但感覺JS中語法的卻不太嚴(yán)謹(jǐn),方法名居然會和img名搞混。JS引擎解析時,方法和變量是同等對待的,而且我再high()方法中沒有申明直接使用的high變量是全局的嗎?

          剛在修改這個JS的時候,我這樣用為什么不行?
          function high(imgHigh){
          //haha = imgHigh; 將此行注釋
          if(typeof(lowlighting) != "undefined") clearInterval(lowlighting);
          highlighting=setInterval("highlightit(imgHIgh)",100); //相應(yīng)更換,直接使用參數(shù)
          }

          function low(imgLow){
          //hehe = imgLow; 將此行注釋
          clearInterval(highlighting);
          lowlighting = setInterval("lowLight(imgLow)",100); // 相應(yīng)更換,直接使用參數(shù)
          }

          為什么不行呢?提示找不到imgLow。難道傳過來的參數(shù)作用域是局部的,而且參數(shù)傳的是引用,不是值?
          也許是受JAVA的影響,有點(diǎn)迷糊了!呵呵

          # re: 又是JS的問題!最近研究中……  回復(fù)  更多評論   

          2006-08-06 20:34 by hahahehe
          setInterval函數(shù)比較奇怪,它只認(rèn)識全局變量,不認(rèn)識局部變量,上面的haha和hehe沒用var來修飾,所以他們是全局變量,你傳過來的參數(shù)是局部變量,所以它不認(rèn)識,setInterval的第一個參數(shù)除了可以是string之外,也可以就是一個function,是字符串的話它就把這個字符串當(dāng)作代碼來執(zhí)行一遍,如果是function的話,它就調(diào)用這個函數(shù),但這樣有一個問題,你沒法給這個function 傳參數(shù)
          比如setInterval("f()", 1000)和setInterval(f, 1000),他們的作用是一樣的,但是如果函數(shù)f需要一個參數(shù),前面的你可以寫成setInterval("f(1)", 1000),而后面的那種方法就行不通了,但是前面的那種形式你的參數(shù)必須是一個全局的,所以也不是很爽,可以把后面的那種形式變通一下,讓它支持參數(shù),因此我寫了一個函數(shù)bind,它返回一個函數(shù)
          function bind(func, args) {
          return function() {
          func.apply(null, args);
          };
          }
          注意函數(shù)變量的方法apply的第二個參數(shù)要求是一個數(shù)組,那么你的
          highlighting=setInterval("highlightit(imgHIgh)",100);
          可以寫成這樣
          highlighting=setInterval(bind(highlightit, [imgHIgh]), 100);
          這樣你就不用擔(dān)心局部還是全局的問題了,hoho

          # re: 又是JS的問題!最近研究中……  回復(fù)  更多評論   

          2006-08-06 22:04 by 兵臨城下
          就setInterval只認(rèn)全局變量,一般其他的方法就可以使用局部變量?
          如果這樣你的自定義方法不錯,是個解決辦法!

          # re: 又是JS的問題!最近研究中……  回復(fù)  更多評論   

          2006-08-11 12:36 by hahahehe
          反正把代碼直接寫到字符串里然后執(zhí)行它就是一點(diǎn)奇怪,setInterval就是例子 "highlightit(imgHIgh)",它居然不認(rèn)識參數(shù)imgHIgh,我也懶得去管它這個怪異的執(zhí)行字符串表達(dá)式的功能,還是寫一個函數(shù)在那里比較放心
          主站蜘蛛池模板: 大足县| 桃园县| 秦皇岛市| 苏尼特右旗| 开封市| 石渠县| 策勒县| 临邑县| 合川市| 珠海市| 南丹县| 丁青县| 九江市| 阿城市| 玉树县| 深圳市| 印江| 宁明县| 墨江| 长宁区| 区。| 红原县| 探索| 东至县| 德昌县| 精河县| 定兴县| 安庆市| 益阳市| 尼玛县| 永宁县| 嘉黎县| 和政县| 海兴县| 新营市| 宜川县| 南雄市| 来安县| 香港 | 都昌县| 正定县|