說在前面:先說一下兩者之間的區別,假設當前元素為element,mouseover事件具有冒泡特性,也就是說無論滑鼠是從別的元素移動到element或者是從element的子元素移動到element都會觸發mouseover事件。對於mouseenter事件,該事件沒有冒泡特性,也就是說只有滑鼠穿過該事件的時候才會觸發mouseenter,如果滑鼠一直在element內部“遊走”,則不會觸發mouseenter。具體的例子可以參考這個例子點擊打開連結。
前提說完了,那怎麼使用mouseover實作mouseenter呢!
我們先來看看jQuery是怎麼實現的,以下是jQuery中實作mouseenter以及mouseleave的程式碼:
jQuery.each({ mouseenter: "mouseover", mouseleave: "mouseout" }, function( orig, fix ) { jQuery.event.special[ orig ] = { delegateType: fix, bindType: fix, handle: function( event ) { var ret, target = this, related = event.relatedTarget, handleObj = event.handleObj; // For mousenter/leave call the handler if related is outside the target. // NB: No relatedTarget if the mouse left/entered the browser window if ( !related || (related !== target && !jQuery.contains( target, related )) ) { event.type = handleObj.origType; ret = handleObj.handler.apply( this, arguments ); event.type = fix; } return ret; } }; });
其他的倒不用看,關鍵在於if 判斷語句以及其中的組合條件,我們可以看到如果related是空或undefined,則表示滑鼠已經移動到window上面了,那麼這時肯定已經穿過了該元素。為什麼這麼肯定,我們需要知道的是,底層這個判斷語句是在mouseover事件中處理的,related返回的就是滑鼠是從哪一個元素移動到element的,如果是window,那麼肯定是「穿過」了element .
那麼看第二個條件,related!==target && !jQuery.contains(target,related)。我們可以看到target=this;那麼target指向的就是element,而related指向的則是由哪一個元素移動到element的,我們知道mouseover和mouseenter的區別在於,在從子元素中移動到element的時候是否觸發相應的事件。這個情況就可以用related!==target && jQuery.contains(target,related)來過濾掉。
透過上一段的解釋,我們知道這個條件的功能是,如果是從別的元素移動到element的時候,判斷是否是從element的子元素移動過來的,如果是的話,則不觸發事件,如果不是的話(!jQuery.contains(target,related)),則說明是從element的「外部」移動過來的,那麼就表示滑鼠已經穿過了element,就需要觸發事件。
當然了這是jQuery下的實現,如果想用原生的js程式碼實現,可以結合relatedTarget實現。當然在IE中也許我們會用到fromElement以及toElement結合的方式來實現。
這是自己學習過程中的記錄了,我的理解可能有誤,希望大家在評論中能夠提出不足之處。
以上是jquery中的mouseenter的深入理解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

实现方法:1、用“$("img").delay(毫秒数).fadeOut()”语句,delay()设置延迟秒数;2、用“setTimeout(function(){ $("img").hide(); },毫秒值);”语句,通过定时器来延迟。

区别:1、axios是一个异步请求框架,用于封装底层的XMLHttpRequest,而jquery是一个JavaScript库,只是顺便封装了dom操作;2、axios是基于承诺对象的,可以用承诺对象中的方法,而jquery不基于承诺对象。

修改方法:1、用css()设置新样式,语法“$(元素).css("min-height","新值")”;2、用attr(),通过设置style属性来添加新样式,语法“$(元素).attr("style","min-height:新值")”。

增加元素的方法:1、用append(),语法“$("body").append(新元素)”,可向body内部的末尾处增加元素;2、用prepend(),语法“$("body").prepend(新元素)”,可向body内部的开始处增加元素。

在jquery中,apply()方法用于改变this指向,使用另一个对象替换当前对象,是应用某一对象的一个方法,语法为“apply(thisobj,[argarray])”;参数argarray表示的是以数组的形式进行传递。

删除方法:1、用empty(),语法“$("div").empty();”,可删除所有子节点和内容;2、用children()和remove(),语法“$("div").children().remove();”,只删除子元素,不删除内容。

on()方法有4个参数:1、第一个参数不可省略,规定要从被选元素添加的一个或多个事件或命名空间;2、第二个参数可省略,规定元素的事件处理程序;3、第三个参数可省略,规定传递到函数的额外数据;4、第四个参数可省略,规定当事件发生时运行的函数。

去掉方法:1、用“$(selector).removeAttr("readonly")”语句删除readonly属性;2、用“$(selector).attr("readonly",false)”将readonly属性的值设置为false。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Dreamweaver Mac版
視覺化網頁開發工具