<html lang="en"> <head> <meta charset="UTF-8"> <title>魔降風雲變</title> <style> #box{ width: 200px; height: 200px; background-color: red; } #child{ width: 50px; height: 50px; background-color: #000; } </style> </head> <body> <div id="box"> <div id="child"></div> </div> </body> </html>
一個父元素,一個子元素javascript
添加jqhtml
<script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript"> $('#box').mouseover(function () { console.log('移入進來了'); }) </script>
將鼠標從空白移動紅會打印,移除紅再移到紅再打印,將鼠標從紅移動黑會打印,從黑移到紅會打印。黑紅間來回移,移一次打印一次。前端
也就是說移到父元素上,和移到子元素上都會調用此事件。java
修改樣式:jquery
#box{ width: 100px; height:40px; background-color: red; position: relative; } #child{ width: 100px; height: 100px; background-color: #000; position: absolute; }
作成子絕父相,子黑父紅,設置寬高。而後被蓋住了。ajax
給子盒子往下調一下,寬度加一下,變成以下:後端
#child{ width: 400px; height: 100px; background-color: #000; position: absolute; top: 40px; }
黑盒子設置display:none ,紅盒子鼠標over事件時,選中黑盒子.slideDown()一秒顯示。服務器
<script type="text/javascript"> $('#box').mouseover(function () { console.log('移入進來了'); $('#child').slideDown(1000); }) </script>
效果:鼠標移到紅盒子,黑盒子1秒內下滑而出而後就這樣了。咱們須要的效果應該是移到紅就出黑,移出紅就隱藏黑。ide
添加移出鼠標的效果:函數
<script type="text/javascript"> $('#box').mouseover(function () { console.log('移入進來了'); $('#child').slideDown(1000); }) $('#box').mouseout(function () { console.log('移出去了'); $('#child').slideUp(1000); }) </script>
效果:移出紅,黑上滑變沒。短期內屢次移入移出,而後中止鼠標不動,它會計數移入移出次數,直到次數結束移入移出效果才停
設置黑盒子top的時候不當心多加了1px,紅黑有了縫隙。
鼠標穿過父級元素和子元素都會調用這個方法:從父移到子的歷程,黑經歷離開父隱藏,移到子顯示;從子移到父歷程,黑經歷離開子隱藏,移到父顯示;兩種移到一次可是黑都是隱藏顯示動了兩次。
事件具備傳播性,從父到子的傳播。小米購物車通常用的不是鼠標over的事件,消耗性能
<html lang="en"> <head> <meta charset="UTF-8"> <title>魔降風雲變</title> <style> #box{ width: 100px; height:40px; background-color: red; position: relative; } #child{ width: 400px; height: 100px; background-color: #000; position: absolute; top: 40px; display: none; } </style> </head> <body> <div id="box"> <div id="child"></div> </div> <script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript"> $('#box').mouseenter(function () { console.log('移入進來了'); $('#child').slideDown(1000); }) $('#box').mouseleave(function () { console.log('移出去了'); $('#child').slideUp(1000); }) </script> </body> </html>
$('#box').mouseenter(function () { console.log('移入進來了'); $('#child').slideDown(1000); }) $('#box').mouseleave(function () { console.log('移出去了'); $('#child').slideUp(1000); })
只有鼠標到紅顯示黑,鼠標從紅到黑不會動,而以前是黑上下動了兩次。若是這裏二者間有空隙也容易出上面的問題。
若是快速反覆進入離開紅的操做,那麼黑在鼠標不動以後仍然顯示隱藏反覆數的次數。全部每次都應該中止stop()而後再上滑下滑
捲簾門效果代碼:
<html lang="en"> <head> <meta charset="UTF-8"> <title>魔降風雲變</title> <style> #box{ width: 100px; height:40px; background-color: red; position: relative; } #child{ width: 400px; height: 100px; background-color: #000; position: absolute; top: 40px; display: none; } </style> </head> <body> <div id="box"> <div id="child"></div> </div> <script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript"> $('#box').mouseenter(function () { console.log('進來了'); $('#child').stop().slideDown(1000); }) $('#box').mouseleave(function () { console.log('離開了'); $('#child').stop().slideUp(1000); }) </script> </body> </html>
小米購物車就是這個方法:
鼠標離開進來各作什麼事情
hover方法比上面那個代碼量少,結合兩者的效果,使用兩個回調函數
<html lang="en"> <head> <meta charset="UTF-8"> <title>魔降風雲變</title> <style> #box{ width: 100px; height:40px; background-color: red; position: relative; } #child{ width: 400px; height: 100px; background-color: #000; position: absolute; top: 40px; display: none; } </style> </head> <body> <div id="box"> <div id="child"></div> </div> <script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript"> $('#box').hover(function () { $('#child').stop().slideDown(1000) }, function () { $('#child').stop().slideUp(1000);} ) </script> </body> </html>
<script type="text/javascript"> $('#box').hover(function () { $('#child').stop().slideDown(1000) }, function () { $('#child').stop().slideUp(1000);} ) </script>
鼠標點到框裏是聚焦 鼠標點到框外是失焦
網頁顯示出來就聚焦:調用一下focus()
<script type="text/javascript"> $('input[type=text]').focus(); $('input[type=text]').focus(function () { console.log('聚焦了'); }) $('input[type=text]').blur(function () { console.log('失焦了'); }) </script>
<html lang="en"> <head> <meta charset="UTF-8"> <title>魔降風雲變</title> </head> <body> <input type="text"> <script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript"> $('input[type=text]').keydown(function () { console.log('鍵盤按下了'); }) </script> </body> </html>
按下鍵盤哪一個鍵能夠獲取按的是哪一個鍵盤碼 keycode:
<html lang="en"> <head> <meta charset="UTF-8"> <title>魔降風雲變</title> </head> <body> <input type="text"> <script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript"> $('input[type=text]').keydown(function (e) { console.log(e); }) </script> </body> </html>
其實每一個事件都有個默認的e參數,打印參數e。它是event 事件對象。
其中包括keyCode屬性:三個.點一下就顯示內容了。
<html lang="en"> <head> <meta charset="UTF-8"> <title>魔降風雲變</title> </head> <body> <input type="text"> <script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript"> $('input[type=text]').keydown(function (e) { console.log(e.keyCode); }) </script> </body> </html>
keyCode碼有點像ASCII碼
<html lang="en"> <head> <meta charset="UTF-8"> <title>魔降風雲變</title> </head> <body> <input type="text"> <script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript"> $('input[type=text]').keydown(function (e) { console.log(e.keyCode); switch (e.keyCode) { case 65: //按a鍵作什麼 break; case 66: //按鍵b作什麼 break; default: // break; } }) //switch方法裏面能夠寫不少,這裏能夠寫成函數,keydown事件裏就調用這個函數 </script> </body> </html>
<html lang="en"> <head> <meta charset="UTF-8"> <title>魔降風雲變</title> </head> <body> <input type="text"> <script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript"> $('input[type=text]').keydown(function (e) { console.log(e.keyCode); switch (e.keyCode) { case 8: $(this).val('') break; case 66: //按鍵b作什麼 break; default: // break; } }) //switch方法裏面能夠寫不少,這裏能夠寫成函數,keydown事件裏就調用這個函數 </script> </body> </html>
$('input[type=text]').keydown(function (e) { console.log(e.keyCode); switch (e.keyCode) { case 8: $(this).val('') break; case 66: //按鍵b作什麼 break; default: // break; } })
寫入abc再按刪除鍵,清空。原理是當按鍵是刪除鍵8的時候,將這個對象的值等於空
<html lang="en"> <head> <meta charset="UTF-8"> <title>魔降風雲變</title> </head> <body> <form action=""> <input type="text" placeholder="用戶名"> <input type="password" placeholder="密碼"> <input type="submit" > </form> <script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript"> </script> </body> </html>
有個提示的用戶名 placeholder="用戶名"。form表單有個默認的提交,提交地址是action內容
應該是輸入用戶名和密碼點擊提交,後端給咱們重定向地址,而不是使用form默認的。
通常提交用戶名密碼給後端,後端確認無誤後把信息傳給前端,前端再給個提示或者提示框,不少都顯示3秒後進入***頁面。而後登錄到首頁。這是先後端合做完成,若是隻是用from表單的action的話,只能前端傳遞數據給後端,後端不能給前端返回數據。
<form action=""> <input type="text" placeholder="用戶名"> <input type="password" placeholder="密碼"> <input type="submit" > </form> <script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript"> $('form').submit(function () { console.log(‘mcw’); }) </script>
有個問號,點擊提交事件以後,先走的默認的提交事件,而不是本身js寫的點擊事件
那麼應該把默認的提交事件取消掉。方法是添加:
<form action="javascript:void(0);"> <input type="text" placeholder="用戶名"> <input type="password" placeholder="密碼"> <input type="submit" > </form> <script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript"> $('form').submit(function () { console.log('mcw'); }) </script>
除了form表單須要去默認,a標籤也須要;
<a href="javascript:void(0);">mcw</a>
也可使用 : <a href="javascript:;">mcw</a>
點擊後顯示
也能夠用jq裏的方法:
<form action=""> <input type="text" placeholder="用戶名"> <input type="password" placeholder="密碼"> <input type="submit" > </form> <script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript"> $('form').submit(function (e) { e.preventDefault(); console.log('mcw'); }) </script>
阻止當前默認事件3方法: javascript:void(0); <a href="javascript:;">mcw</a> $('form').submit(function(e){e.preventDefault(); ****});
若是form和後端交互的時候,前端不須要獲取數據,那麼就用form默認的提交就能夠了。
下面來講前端須要獲取後端數據的狀況:
本身寫腳本的話,那麼須要jq,js獲取到用戶名和密碼這些值。提交給服務器。那麼這裏就須要大量操做,就須要使用都ajax。
ajax的代碼
下面是拿到的數據:能夠取res數據對頁面進行操做。好比對某塊父div內的內容作操做,而不用整個網頁刷新。DOM裏reload方法能讓整個網頁刷新,ajax針對於一塊 局部進行刷新。在不重載頁面的狀況下讓這個頁面刷新