360瀏覽器引起導(dǎo)航的閃爍問(wèn)題

在做一個(gè)網(wǎng)頁(yè)的導(dǎo)航時(shí)遇到這樣一個(gè)坑积瞒,鼠標(biāo)移動(dòng)在導(dǎo)航鏈接上出現(xiàn)導(dǎo)航閃爍的情況


圖1

放到任意鏈接上叉弦,導(dǎo)航會(huì)開(kāi)始閃爍丐一。打開(kāi)F12開(kāi)發(fā)者工具發(fā)現(xiàn)出現(xiàn)閃爍的原因在于一個(gè)class="show"不停切換導(dǎo)致的。圖2


圖2

代碼的整體思路應(yīng)該是通過(guò)show這個(gè)class來(lái)決定是否顯示透明導(dǎo)航塊淹冰。通過(guò)詢問(wèn)得知這個(gè)懸浮主要用到了css的hover偽類库车,以及mouseover和mouseout事件來(lái)實(shí)現(xiàn)的。由圖看出是切換class引起的bug樱拴,所以排除是hover的問(wèn)題柠衍。直接在代碼里面找到對(duì)應(yīng)的鼠標(biāo)事件。代碼如圖3晶乔。圖4


圖三


圖4

從上述代碼看出mouseover和mouseout指向同一個(gè)事件珍坊,只是傳遞的參數(shù)不同。當(dāng)傳入true時(shí)正罢,透明導(dǎo)航塊isList判斷為真阵漏,它遍帶有show這個(gè)class。透明導(dǎo)航塊顯示翻具。反之透明導(dǎo)航塊隱藏履怯。showMenu函數(shù)沒(méi)有任何邏輯,直接對(duì)this.isList賦值裆泳。于是猜測(cè)這個(gè)是由于mouseover和mouseout這兩個(gè)鼠標(biāo)事情冒泡引起的叹洲。

于是,我嘗試使用mouseenter和mouseleave事件分別代替mouseover和mouseout事件工禾。因?yàn)槲覀冎酪坏┠砫om元素的子元素被mouseover了运提,它自己也就被mouseover了,而mouseenter卻是物理上的闻葵,即只有你眼睛看到光標(biāo)進(jìn)入了的元素糙捺,才會(huì)觸發(fā)mouseenter事件。換句話說(shuō)mouseenter和mouseleave事件不會(huì)冒泡笙隙,mouseover和mouseout事件會(huì)事件冒泡洪灯。替換鼠標(biāo)事件之后發(fā)現(xiàn),原本的閃爍問(wèn)題有得到緩解,但沒(méi)有完全消失签钩,第一次鼠標(biāo)進(jìn)入還會(huì)閃爍一次掏呼,而之前會(huì)多次閃爍。經(jīng)查發(fā)現(xiàn):mouseenter事件在鼠標(biāo)進(jìn)入某個(gè)元素铅檩,或第一次進(jìn)入這個(gè)元素的某個(gè)子元素時(shí)觸發(fā)憎夷。一旦觸發(fā)后,在mouseleave之前昧旨,鼠標(biāo)在這個(gè)元素的子元素上觸發(fā)mouseenter事件都不會(huì)觸發(fā)這個(gè)元素的mouseenter事件拾给。即:一旦進(jìn)入,在子元素間的mouseenter不算是在本元素上的mouseenter兔沃。而mouseover事件是必然冒泡的蒋得,一旦子元素mouseover了,本元素必然mouseover(除非子元素上禁止冒泡了)乒疏。

知道這確實(shí)是事件冒泡引起的閃爍额衙,這相當(dāng)于鼠標(biāo)進(jìn)入目標(biāo)元素后,執(zhí)行一次mouseover事件怕吴,由于事件冒泡目標(biāo)元素父類同樣會(huì)執(zhí)行一次mouseover事件窍侧。離開(kāi)目標(biāo)元素同樣執(zhí)行不止一次mouseout事件。這相當(dāng)于this.isList的值為true極短的時(shí)間內(nèi)由于事件冒泡this.isList的值會(huì)為false然后再變成true转绷。正是這個(gè)極短的過(guò)程導(dǎo)致了閃爍伟件。

知道了原理之后。我們可以利用setTimeout來(lái)控制mouseout事件的執(zhí)行代碼如圖5


圖5


首先我在data里面聲明了一個(gè)timer作為定時(shí)器(圖5中沒(méi)有體現(xiàn)聲明)议经。然后通過(guò)判斷show的值來(lái)決定是顯示還是隱藏透明導(dǎo)航塊锋爪。當(dāng)show的值為false的時(shí)候是隱藏,但是沒(méi)有立刻讓isList的值變成false爸业。而是設(shè)置一個(gè)定時(shí)器讓其在0.5秒之后再賦值為false。而當(dāng)show為true時(shí)清除在show為false聲明的定時(shí)器亏镰。這樣的處理會(huì)使得定時(shí)器還沒(méi)來(lái)得及將isList設(shè)置為false的時(shí)候就被清除了扯旷,也就是來(lái)不及閃爍了。只有在0.5秒后沒(méi)有mouseover事件發(fā)生索抓,isList才會(huì)被設(shè)置為false钧忽,也就是在鼠標(biāo)徹底離開(kāi)導(dǎo)航時(shí),透明導(dǎo)航去才會(huì)隱藏起來(lái)逼肯。至此閃爍問(wèn)題得到解決了耸黑。

在這個(gè)問(wèn)題下還有一點(diǎn)疑惑,就是閃爍問(wèn)題只在360的某些版本中出現(xiàn)篮幢。其他主流瀏覽器并未發(fā)現(xiàn)這個(gè)問(wèn)題大刊。有清楚這個(gè)問(wèn)題的朋友望告知。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末三椿,一起剝皮案震驚了整個(gè)濱河市缺菌,隨后出現(xiàn)的幾起案子葫辐,更是在濱河造成了極大的恐慌,老刑警劉巖伴郁,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件耿战,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡焊傅,警方通過(guò)查閱死者的電腦和手機(jī)剂陡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)狐胎,“玉大人鸭栖,你說(shuō)我怎么就攤上這事⊥绲” “怎么了纤泵?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)镜粤。 經(jīng)常有香客問(wèn)我捏题,道長(zhǎng),這世上最難降的妖魔是什么肉渴? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任公荧,我火速辦了婚禮,結(jié)果婚禮上同规,老公的妹妹穿的比我還像新娘循狰。我一直安慰自己,他們只是感情好券勺,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布绪钥。 她就那樣靜靜地躺著,像睡著了一般关炼。 火紅的嫁衣襯著肌膚如雪程腹。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,365評(píng)論 1 302
  • 那天儒拂,我揣著相機(jī)與錄音寸潦,去河邊找鬼。 笑死社痛,一個(gè)胖子當(dāng)著我的面吹牛见转,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蒜哀,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼斩箫,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起校焦,我...
    開(kāi)封第一講書(shū)人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤赊抖,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后寨典,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體氛雪,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年耸成,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了报亩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡井氢,死狀恐怖弦追,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情花竞,我是刑警寧澤劲件,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站约急,受9級(jí)特大地震影響零远,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜厌蔽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一牵辣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧奴饮,春花似錦纬向、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至投剥,卻和暖如春师脂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背薇缅。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留攒磨,地道東北人泳桦。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像娩缰,于是被迫代替她去往敵國(guó)和親灸撰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容