<i id="5twz9"><legend id="5twz9"></legend></i>

    <p id="5twz9"><strike id="5twz9"></strike></p>
    <p id="5twz9"></p>
    <menu id="5twz9"><strike id="5twz9"></strike></menu>\n
    \n
    \n
    \n\n測(cè)試用的文字\n<\/i>\n<\/a>\n<\/div>\n<\/div>\n<\/div>\n

    国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

    首頁(yè) web前端 js教程 分享有關(guān)jQuery中animate、slide、fade等動(dòng)畫的連續(xù)觸發(fā)、滯后反復(fù)執(zhí)行的bug_jquery

    分享有關(guān)jQuery中animate、slide、fade等動(dòng)畫的連續(xù)觸發(fā)、滯后反復(fù)執(zhí)行的bug_jquery

    May 16, 2016 pm 03:20 PM

    我寫文章的風(fēng)格就是喜歡在開(kāi)頭講問(wèn)題法傷的背景:

    因?yàn)樽罱鰝€(gè)操作選項(xiàng)的呼出,然后就想到了用默認(rèn)隱藏,鼠標(biāo)劃過(guò)的時(shí)候顯示的方法。

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

    (還好我沒(méi)養(yǎng)成一碰到要做某個(gè)特效,第一反應(yīng)是網(wǎng)上找插件,說(shuō)起這個(gè),又想到前幾天碰到的關(guān)于將table中的表頭對(duì)界面滾動(dòng)而固定的那個(gè)解決方法了,過(guò)幾天傳上來(lái),講真,那個(gè)方法網(wǎng)上找了一圈沒(méi)找到合適的解決方法,最后我自己想了個(gè)方法,還是蠻有成績(jī)感的,雖然有可能不是最優(yōu)的解決方案)

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

    然后,最后還是自己動(dòng)手寫了,雖然花了點(diǎn)時(shí)間,也碰到了一些問(wèn)題,不過(guò)還是不錯(cuò)的,問(wèn)題也最后解決了,至少對(duì)幾個(gè)jQuery的內(nèi)置函數(shù)又熟悉了一點(diǎn)。

    ps:最后補(bǔ)充一句,在我自己找出解決方案后,再次百度了一下,好吧,出來(lái)的第一個(gè)網(wǎng)頁(yè)鏈接,點(diǎn)進(jìn)去就是我所用的方法。

    bug重現(xiàn):原本想做個(gè)動(dòng)圖的,好像太麻煩了,還是上代碼吧,知道這個(gè)問(wèn)題的應(yīng)該不用看動(dòng)圖也知道是個(gè)怎么樣的問(wèn)題;不知道這個(gè)問(wèn)題的,可以先把代碼拷貝下來(lái)試一下。

    PS:下面以animate動(dòng)畫為例

    <!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>
    測(cè)試用的文字
    <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"});
    })
    //連續(xù)觸發(fā)動(dòng)畫bug
    //不允許動(dòng)畫累積;或是在新的動(dòng)畫開(kāi)始前,先停止當(dāng)前正在進(jìn)行的動(dòng)畫
    </script>
    </body>
    </html>

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

    最開(kāi)始,

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

    這兩句代碼,是沒(méi)有filter()函數(shù)的,也就是最開(kāi)始碰到這個(gè)bug的時(shí)候的代碼的樣子。

    這個(gè)bug產(chǎn)生原因就是事件在短時(shí)間內(nèi)(上一個(gè)動(dòng)畫未播放完),動(dòng)畫累積導(dǎo)致的(估計(jì)碰到這個(gè)問(wèn)題的,回過(guò)頭去看看代碼都知道這個(gè)原因)。所以,解決的方法,有兩個(gè)。

    【filter】

    一個(gè)就是用filter過(guò)濾,在動(dòng)畫發(fā)生前,過(guò)濾掉正在進(jìn)行動(dòng)畫的元素,只讓上一個(gè)動(dòng)畫已經(jīng)結(jié)束的元素才能觸發(fā)新的事件。

    然后這就帶來(lái)一個(gè)新問(wèn)題了,當(dāng)我把鼠標(biāo)移至對(duì)應(yīng)的內(nèi)容上,mouseover事件觸發(fā),這個(gè)時(shí)候,在動(dòng)畫還未結(jié)束的時(shí)候,我再將鼠標(biāo)移除對(duì)應(yīng)內(nèi)容區(qū)域外,mouseleave事件觸發(fā),但是因?yàn)樯弦粋€(gè)動(dòng)畫還未結(jié)束,所以即使觸發(fā)了該事件,但預(yù)期的函數(shù)并未執(zhí)行,此時(shí)預(yù)期中的“mouseleave事件觸發(fā),內(nèi)容隱藏”結(jié)果便無(wú)法做到了。

    當(dāng)然,如果操作者在mouseover事件觸發(fā)的動(dòng)畫結(jié)束前,鼠標(biāo)一直停在對(duì)應(yīng)內(nèi)容上,這個(gè)方案并不會(huì)有影響。

    【stop】

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

    //語(yǔ)法結(jié)構(gòu)
    $("#div").stop();//停止當(dāng)前動(dòng)畫,繼續(xù)下一個(gè)動(dòng)畫
    $("#div").stop(true);//清除元素的所有動(dòng)畫
    $("#div").stop(false, true);//讓當(dāng)前動(dòng)畫直接到達(dá)末狀態(tài) ,繼續(xù)下一個(gè)動(dòng)畫
    $("#div").stop(true, true);//清除元素的所有動(dòng)畫,讓當(dāng)前動(dòng)畫直接到達(dá)末狀態(tài)

    這個(gè)方案的思路,就是簡(jiǎn)單的:當(dāng)我mouseover的時(shí)候,觸發(fā)對(duì)應(yīng)的動(dòng)畫,但是在動(dòng)畫還未結(jié)束的時(shí)候,我卻要mouseleave,同時(shí)觸發(fā)mouseleave對(duì)應(yīng)的動(dòng)畫,這個(gè)時(shí)候我便需要停止對(duì)應(yīng)元素正在進(jìn)行的動(dòng)畫。然后,這個(gè)bug也就不存在了。

    最后,好吧,這篇隨筆好像也沒(méi)啥總結(jié)的,其實(shí)就是對(duì)animate、slide、fade動(dòng)畫函數(shù)的熟悉吧,同時(shí)再熟悉一下stop有參數(shù)無(wú)參數(shù)的區(qū)別(講真,剛開(kāi)始沒(méi)想到用stop,過(guò)了一兩天后,偶然看到API的時(shí)候,看到了stop,才突然有了用stop解決這個(gè)bug的設(shè)想)。

    以上所述是腳本之家小編給大家分享有關(guān)jQuery中animate、slide、fade等動(dòng)畫的連續(xù)觸發(fā)、滯后反復(fù)執(zhí)行的bug,希望對(duì)大家今后的工作學(xué)習(xí)有所幫助。

    本站聲明
    本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

    熱AI工具

    Undress AI Tool

    Undress AI Tool

    免費(fèi)脫衣服圖片

    Undresser.AI Undress

    Undresser.AI Undress

    人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

    AI Clothes Remover

    AI Clothes Remover

    用于從照片中去除衣服的在線人工智能工具。

    Clothoff.io

    Clothoff.io

    AI脫衣機(jī)

    Video Face Swap

    Video Face Swap

    使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

    熱工具

    記事本++7.3.1

    記事本++7.3.1

    好用且免費(fèi)的代碼編輯器

    SublimeText3漢化版

    SublimeText3漢化版

    中文版,非常好用

    禪工作室 13.0.1

    禪工作室 13.0.1

    功能強(qiáng)大的PHP集成開(kāi)發(fā)環(huán)境

    Dreamweaver CS6

    Dreamweaver CS6

    視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神級(jí)代碼編輯軟件(SublimeText3)

    Java vs. JavaScript:清除混亂 Java vs. JavaScript:清除混亂 Jun 20, 2025 am 12:27 AM

    Java和JavaScript是不同的編程語(yǔ)言,各自適用于不同的應(yīng)用場(chǎng)景。Java用于大型企業(yè)和移動(dòng)應(yīng)用開(kāi)發(fā),而JavaScript主要用于網(wǎng)頁(yè)開(kāi)發(fā)。

    JavaScript評(píng)論:簡(jiǎn)短說(shuō)明 JavaScript評(píng)論:簡(jiǎn)短說(shuō)明 Jun 19, 2025 am 12:40 AM

    JavascriptconcommentsenceenceEncorenceEnterential gransimenting,reading and guidingCodeeXecution.1)單inecommentsareusedforquickexplanations.2)多l(xiāng)inecommentsexplaincomplexlogicorprovideDocumentation.3)

    如何在JS中與日期和時(shí)間合作? 如何在JS中與日期和時(shí)間合作? Jul 01, 2025 am 01:27 AM

    JavaScript中的日期和時(shí)間處理需注意以下幾點(diǎn):1.創(chuàng)建Date對(duì)象有多種方式,推薦使用ISO格式字符串以保證兼容性;2.獲取和設(shè)置時(shí)間信息可用get和set方法,注意月份從0開(kāi)始;3.手動(dòng)格式化日期需拼接字符串,也可使用第三方庫(kù);4.處理時(shí)區(qū)問(wèn)題建議使用支持時(shí)區(qū)的庫(kù),如Luxon。掌握這些要點(diǎn)能有效避免常見(jiàn)錯(cuò)誤。

    為什么要將標(biāo)簽放在的底部? 為什么要將標(biāo)簽放在的底部? Jul 02, 2025 am 01:22 AM

    PlacingtagsatthebottomofablogpostorwebpageservespracticalpurposesforSEO,userexperience,anddesign.1.IthelpswithSEObyallowingsearchenginestoaccesskeyword-relevanttagswithoutclutteringthemaincontent.2.Itimprovesuserexperiencebykeepingthefocusonthearticl

    JavaScript與Java:開(kāi)發(fā)人員的全面比較 JavaScript與Java:開(kāi)發(fā)人員的全面比較 Jun 20, 2025 am 12:21 AM

    JavaScriptIspreferredforredforwebdevelverment,而Javaisbetterforlarge-ScalebackendsystystemsandSandAndRoidApps.1)JavascriptexcelcelsincreatingInteractiveWebexperienceswebexperienceswithitswithitsdynamicnnamicnnamicnnamicnnamicnemicnemicnemicnemicnemicnemicnemicnemicnddommanipulation.2)

    JavaScript:探索用于高效編碼的數(shù)據(jù)類型 JavaScript:探索用于高效編碼的數(shù)據(jù)類型 Jun 20, 2025 am 12:46 AM

    javascripthassevenfundaMentalDatatypes:數(shù)字,弦,布爾值,未定義,null,object和symbol.1)numberSeadUble-eaduble-ecisionFormat,forwidevaluerangesbutbecautious.2)

    什么是在DOM中冒泡和捕獲的事件? 什么是在DOM中冒泡和捕獲的事件? Jul 02, 2025 am 01:19 AM

    事件捕獲和冒泡是DOM中事件傳播的兩個(gè)階段,捕獲是從頂層向下到目標(biāo)元素,冒泡是從目標(biāo)元素向上傳播到頂層。1.事件捕獲通過(guò)addEventListener的useCapture參數(shù)設(shè)為true實(shí)現(xiàn);2.事件冒泡是默認(rèn)行為,useCapture設(shè)為false或省略;3.可使用event.stopPropagation()阻止事件傳播;4.冒泡支持事件委托,提高動(dòng)態(tài)內(nèi)容處理效率;5.捕獲可用于提前攔截事件,如日志記錄或錯(cuò)誤處理。了解這兩個(gè)階段有助于精確控制JavaScript響應(yīng)用戶操作的時(shí)機(jī)和方式。

    Java和JavaScript有什么區(qū)別? Java和JavaScript有什么區(qū)別? Jun 17, 2025 am 09:17 AM

    Java和JavaScript是不同的編程語(yǔ)言。1.Java是靜態(tài)類型、編譯型語(yǔ)言,適用于企業(yè)應(yīng)用和大型系統(tǒng)。2.JavaScript是動(dòng)態(tài)類型、解釋型語(yǔ)言,主要用于網(wǎng)頁(yè)交互和前端開(kāi)發(fā)。

    See all articles