1. 程式人生 > >前端面試題之mouseover和mouseenter的區別

前端面試題之mouseover和mouseenter的區別

曾經一度認為,mouseover和mouseenter是不是js設計者弄多餘的,印象中這兩個的效果都是一樣的吧?!

    直到去面試的時候被面試官提出了,說說mouseover和mouseenter有什麼區別,整個人都愕然了,用了那麼就js,還真沒有去認真思考過這個問題。那到底這兩個事件的觸發有什麼不同,他們的存在又有何意義呢,通過兩個栗子來解析一下

    栗子一:

<script type="text/javascript" src="http://code.jquery.com/jquery-1.11.1.min.js"></script> <script
 type="text/javascript"> x=0; y=0; $(document).ready(function(){ $("div.over").mouseover(function(){ $(".over").text(x+=1); }); $("div.enter").mouseenter(function(){ $(".enter").text(y+=1); }); }); </script> <div class="over" style="background-color:lightgray;padding:20px;width:40%;float:left"
> mouseover 事件: </div> <div class="enter" style="background-color:lightgray;padding:20px;width:40%;float:right"> mouseenter 事件: </div>

從上面的栗子可以看到,當繫結著兩個事件的元素裡面沒有子元素的時候,這兩個事件的觸發效果是一致的。

    栗子二:

<script type="text/javascript" src="http://code.jquery.com/jquery-1.11.1.min.js"
></script> <script type="text/javascript"> x=0; y=0; $(document).ready(function(){ $("div.over").mouseover(function(){ $(".over span").text(x+=1); }); $("div.enter").mouseenter(function(){ $(".enter span").text(y+=1); }); }); </script> <div class="over" style="background-color:lightgray;padding:20px;width:40%;float:left"> <h2 style="background-color:white;">被觸發的 Mouseover 事件:<span></span></h2> </div> <div class="enter" style="background-color:lightgray;padding:20px;width:40%;float:right"> <h2 style="background-color:white;">被觸發的 Mouseenter 事件:<span></span></h2> </div>

從栗子二我們就可以真正看到這兩個事件的不同了,當繫結事件的元素裡面有子元素的時候,滑鼠經過繫結mouseover的當前元素以及它裡面的子元素的時候,都會觸發,而經過繫結mouseenter的元素時,只會在滑鼠剛進入的時候觸發,當進入其子元素的時候,是不會再觸發的了。

總結兩句話

  • 不論滑鼠指標穿過被選元素或其子元素,都會觸發 mouseover 事件。對應mouseout

  • 只有在滑鼠指標穿過被選元素時,才會觸發 mouseenter 事件。對應mouseleave