亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

分享有關jQuery中animate、slide、fade等動畫的連續觸發、滯后反復執行的bug

2019-11-20 10:49:35
字體:
來源:轉載
供稿:網友

我寫文章的風格就是喜歡在開頭講問題法傷的背景:

因為最近要做個操作選項的呼出,然后就想到了用默認隱藏,鼠標劃過的時候顯示的方法。

剛開始打算添加一個class="active",直接觸發mouseover(或者mouseenter)的時候add,mouseout(或者mouseleave)的時候remove,這個解決方法很簡單,也很實用,但是體驗上可能不是那么酷炫(好吧,這個詞用的,瞬間感覺好low?。?,所以就想到了用animate或者slide這些jQuery的動畫,然后一開始講真,這個插件自己寫,會碰到些問題,不太好實現(畢竟js掌握的不是很到位),然后聽同事講去找找jquery,導入后直接引用就可以了。

(還好我沒養成一碰到要做某個特效,第一反應是網上找插件,說起這個,又想到前幾天碰到的關于將table中的表頭對界面滾動而固定的那個解決方法了,過幾天傳上來,講真,那個方法網上找了一圈沒找到合適的解決方法,最后我自己想了個方法,還是蠻有成績感的,雖然有可能不是最優的解決方案)

回到正題,網上找了一圈,講真,別人的插件,做的確實很贊,而且各種瀏覽器下的兼容性也解決了,不過我個人而言,只在兩三個頁面用到,而且又要導入文件(這個好像不是特別麻煩),又要用別人的,終歸沒什么成就感。

然后,最后還是自己動手寫了,雖然花了點時間,也碰到了一些問題,不過還是不錯的,問題也最后解決了,至少對幾個jQuery的內置函數又熟悉了一點。

ps:最后補充一句,在我自己找出解決方案后,再次百度了一下,好吧,出來的第一個網頁鏈接,點進去就是我所用的方法。

bug重現:原本想做個動圖的,好像太麻煩了,還是上代碼吧,知道這個問題的應該不用看動圖也知道是個怎么樣的問題;不知道這個問題的,可以先把代碼拷貝下來試一下。

PS:下面以animate動畫為例

<!DOCTYPE html><html lang="zh-CN"><head><title>test</title><meta charset="utf-8"><link rel="stylesheet" href="./bootstrap/css/bootstrap.min.css"><link rel="stylesheet" href="./font-awesome/css/font-awesome.min.css"><script src="./bootstrap/js/jquery-1.11/jquery.min.js"></script><script src="./bootstrap/js/bootstrap.min.js"></script></head><body><div style="width:70%;margin:50px auto;height:300px;"><div id="test" style="width:900px;height:100px;border:1px solid red;overflow:hidden;"><div class="test" style="margin-left:-6em"><a>測試用的文字<i class="fa fa-arrow-right"></i></a></div></div></div><script>$("[data-toggle='tooltip']").tooltip();$("#test").on("mouseover",function(){var $this = $(this);var $thisTest = $this.find("div.test");$thisTest.css("position","relative");// $thisTest.stop();$thisTest.filter(':not(:animated)').animate({marginLeft:"0em"});}).on("mouseout",function(){var $this = $(this);var $thisTest = $this.find("div.test");$thisTest.css("position","relative");// $thisTest.stop();$thisTest.filter(':not(:animated)').animate({marginLeft:"-6em"});})//連續觸發動畫bug//不允許動畫累積;或是在新的動畫開始前,先停止當前正在進行的動畫</script></body></html>

上面這份代碼,stop()這個方法被我注釋掉了,是我個人認為最完美的解決方法,沒有被注釋掉的,是我后來百度了一下后,別人提到的另一種解決方案,但我個人感覺不是特別完美,至于差別我在后面提。

最開始,

$thisTest.filter(':not(:animated)').animate({marginLeft:"0em"});$thisTest.filter(':not(:animated)').animate({marginLeft:"-6em"});

這兩句代碼,是沒有filter()函數的,也就是最開始碰到這個bug的時候的代碼的樣子。

這個bug產生原因就是事件在短時間內(上一個動畫未播放完),動畫累積導致的(估計碰到這個問題的,回過頭去看看代碼都知道這個原因)。所以,解決的方法,有兩個。

【filter】

一個就是用filter過濾,在動畫發生前,過濾掉正在進行動畫的元素,只讓上一個動畫已經結束的元素才能觸發新的事件。

然后這就帶來一個新問題了,當我把鼠標移至對應的內容上,mouseover事件觸發,這個時候,在動畫還未結束的時候,我再將鼠標移除對應內容區域外,mouseleave事件觸發,但是因為上一個動畫還未結束,所以即使觸發了該事件,但預期的函數并未執行,此時預期中的“mouseleave事件觸發,內容隱藏”結果便無法做到了。

當然,如果操作者在mouseover事件觸發的動畫結束前,鼠標一直停在對應內容上,這個方案并不會有影響。

【stop】

對于stop(),雖然知道這是大家都了解的,還是再搬一遍吧。

//語法結構$("#div").stop();//停止當前動畫,繼續下一個動畫$("#div").stop(true);//清除元素的所有動畫$("#div").stop(false, true);//讓當前動畫直接到達末狀態 ,繼續下一個動畫$("#div").stop(true, true);//清除元素的所有動畫,讓當前動畫直接到達末狀態

這個方案的思路,就是簡單的:當我mouseover的時候,觸發對應的動畫,但是在動畫還未結束的時候,我卻要mouseleave,同時觸發mouseleave對應的動畫,這個時候我便需要停止對應元素正在進行的動畫。然后,這個bug也就不存在了。

最后,好吧,這篇隨筆好像也沒啥總結的,其實就是對animate、slide、fade動畫函數的熟悉吧,同時再熟悉一下stop有參數無參數的區別(講真,剛開始沒想到用stop,過了一兩天后,偶然看到API的時候,看到了stop,才突然有了用stop解決這個bug的設想)。

以上所述是武林網小編給大家分享有關jQuery中animate、slide、fade等動畫的連續觸發、滯后反復執行的bug,希望對大家今后的工作學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲天堂男人的天堂| 91精品久久久久久久久青青| 亚洲一区二区少妇| 国产成人福利视频| 性日韩欧美在线视频| 亚洲欧美日韩国产中文专区| 久久精品久久久久久国产 免费| 中文字幕久久久av一区| 国产日产欧美精品| 日韩精品亚洲视频| 亚洲区免费影片| 国产欧美久久一区二区| 日韩电影免费在线观看中文字幕| 欧洲一区二区视频| 亚洲第一综合天堂另类专| 色综合久久久888| 亚洲欧美日韩国产成人| 日韩av片永久免费网站| 亚洲第一级黄色片| 全球成人中文在线| 亚洲欧洲第一视频| 中文字幕精品网| 亚洲色图15p| 8090成年在线看片午夜| 亚洲成人激情在线观看| 国产精品激情av在线播放| www.亚洲免费视频| 九色精品免费永久在线| 91精品国产91久久久| 成年人精品视频| 欧美日韩激情美女| 最新国产精品拍自在线播放| 久久久在线免费观看| 另类专区欧美制服同性| 日韩欧美精品网站| 中文日韩电影网站| 揄拍成人国产精品视频| 日韩精品在线免费观看| 久久综合色影院| 最近2019中文字幕一页二页| 亚洲综合一区二区不卡| 亚洲另类欧美自拍| 国产精品视频资源| 欧美精品激情blacked18| 亚洲国产免费av| 欧美精品生活片| 亚洲欧美精品一区二区| 亚洲成人av片在线观看| 国产视频在线观看一区二区| 国产精品吹潮在线观看| 欧美精品日韩三级| 亚洲丝袜av一区| 国产在线高清精品| 欧美激情在线观看| 欧美性极品少妇精品网站| 久久手机精品视频| 成人免费淫片aa视频免费| 久久久免费观看| 狠狠操狠狠色综合网| 精品一区电影国产| 欧美日本精品在线| 国产欧美日韩精品丝袜高跟鞋| 国内精品视频久久| 久久久亚洲精品视频| 日韩激情视频在线播放| 777国产偷窥盗摄精品视频| 久久免费精品日本久久中文字幕| 国产精品国模在线| 国产一区二区激情| 国产精品久久综合av爱欲tv| 国模gogo一区二区大胆私拍| 日韩最新中文字幕电影免费看| 国产精品一区二区三区免费视频| 日韩精品免费一线在线观看| 国产成人综合一区二区三区| 91极品女神在线| 久久97精品久久久久久久不卡| 久久精品在线播放| 欧美精品激情在线| 国产视频精品自拍| 日韩av网站在线| 亚洲国产成人一区| 成人做爰www免费看视频网站| 亚洲欧美在线一区二区| 亚洲国产精品成人一区二区| 91精品国产沙发| 亚洲电影中文字幕| 精品爽片免费看久久| 国产精品18久久久久久首页狼| 91精品国产综合久久香蕉的用户体验| 色av吧综合网| 国产日韩欧美在线视频观看| 久久6免费高清热精品| 欧美在线视频一区| 欧美视频第一页| 亚洲人在线观看| 国产亚洲精品激情久久| 欧美日韩一区二区免费在线观看| 精品激情国产视频| 精品成人乱色一区二区| 九九九久久久久久| 国产成人精品在线播放| 在线电影欧美日韩一区二区私密| 色妞一区二区三区| 欧美成人免费全部观看天天性色| 成人做爽爽免费视频| 亚洲久久久久久久久久久| 午夜剧场成人观在线视频免费观看| 久久精品视频99| 久久久人成影片一区二区三区| 日韩精品免费一线在线观看| 欧美日韩国产在线| 亚洲精品久久久久中文字幕欢迎你| 亚洲激情在线视频| 国产性猛交xxxx免费看久久| 亚洲free性xxxx护士hd| 国产色综合天天综合网| 国产成人jvid在线播放| 久久久久久网址| 久久乐国产精品| 久久久精品在线观看| 91网站免费观看| 亚洲国语精品自产拍在线观看| 国产精品亚洲美女av网站| 亚洲在线一区二区| 日韩精品视频观看| 91精品视频大全| 91精品久久久久久久久久入口| 久久影院模特热| 精品福利免费观看| 欧美性猛交99久久久久99按摩| 欧美高清视频在线观看| 亚洲理论在线a中文字幕| 国产欧美日韩中文字幕| 日韩av免费在线看| 韩国三级日本三级少妇99| 亚洲精品网站在线播放gif| 久久躁狠狠躁夜夜爽| 亚洲天堂影视av| 欧美激情亚洲另类| 国模gogo一区二区大胆私拍| 国产精品嫩草视频| 亚洲精品美女在线观看| 亚洲999一在线观看www| 91久久国产婷婷一区二区| 国产99视频在线观看| 亚洲激情视频网| 国产精品第3页| 久久精品成人欧美大片| 国产精品精品国产| 欧美精品成人91久久久久久久| 成人看片人aa| 九九热这里只有精品免费看| 日韩福利伦理影院免费| 国产精品国模在线| 亚洲国产第一页| 午夜精品久久久久久久99热| 欧美日韩免费在线观看| 国产精品一区二区女厕厕| 久久精品精品电影网| 国产精品久久综合av爱欲tv| 日韩欧美高清在线视频| 精品亚洲一区二区三区| 久久国产精品免费视频|