事件一般與函數配合使用,這樣就能夠經過發生的事件來驅動函數執行,事件是能夠被 JavaScript 偵測到的行爲瀏覽器
首先咱們要先綁定事件 綁定事件有三種函數
1)在DOM元素中直接綁定,咱們能夠在DOM元素上綁定onclick、onmouseover、onmouseout、onmousedown、onmouseup、ondblclick、onkeydown、onkeypress、onkeyup等等 只能夠執行一次 屢次使用會跟隨文檔流所覆蓋 <div id="box1"></div> <script> var box1=document.getElementById("box1"); box1.onclick=function(){ alert("你瞅啥") } box1.onclick=function(){ alert("瞅你咋地") } </script> 只彈出一個 瞅你咋地 你瞅啥被覆蓋
2)在JavaScript代碼中綁定,在JavaScript代碼中(即 script 標籤內)綁定事件可使JavaScript代碼與HTML標籤分離,文檔結構清晰,便於管理和開發spa
<div id="box1"></div> <script> var box1=document.getElementById("box1"); box1.onclick = function () { alert("不服就幹"); } </script>
3)使用事件監聽綁定事件
綁定事件的另外一種方法是用 addEventListener() 或 attachEvent() 來綁定事件監聽函數code
<div id="box1"></div> <script> var box1=document.getElementById("box1"); box1.addEventListener("click",function(){ alert("再瞅個試試") },false) //默認值爲false 能夠省略不寫 box1.addEventListener("click",function(){ alert("試試就試試") }) //默認值爲false 能夠省略不寫 </script> 兩個均可以正常彈出 跟隨文檔流執行
DOM標準規定事件流包括三個階段:事件捕獲階段、處於目標階段和事件冒泡階段。
捕獲型事件流:事件的傳播是從最不特定的事件目標到最特定的事件目標。即從外部到內部。
冒泡型事件流:事件的傳播是從最特定的事件目標到最不特定的事件目標。即從內部到外部對象
咱們有如下代碼 點擊box3的時候 跟隨圖片描述 捕獲 冒泡 <body> <div id="box1">box1 <div id="box2">box2 <div id="box3">box3</div> </div> </div> </body> <script> var box1=document.getElementById("box1"); var box2=document.getElementById("box2"); var box3=document.getElementById("box3"); box1.addEventListener("click", function () { console.log("捕獲box1") }, true) box2.addEventListener("click", function () { console.log("捕獲box2") }, true) box3.addEventListener("click", function () { console.log("捕獲box3") }, true) box1.addEventListener("click", function () { console.log("冒泡box1") }, false) box3.addEventListener("click", function () { console.log("冒泡box3") }, false) box2.addEventListener("click", function () { console.log("冒泡box2") }, false) </script>
在處於目標階段的時候 就是在本文中點擊box3的時候 若是把冒泡寫在捕獲前面 會跟隨文檔流所執行 致使先冒泡 再捕獲 這一點必定要注意 如如下
如同圖中所示 輸出時順序和你寫入時順序有關seo
什麼是事件委託:
事件委託——給父元素綁定事件,用來監聽子元素的冒泡事件,並找到是哪一個子元素的事件
事件委託三部曲:
第一步:給父元素綁定事件
給元素ul添加綁定事件,經過addEventListener爲點擊事件click添加綁定
第二步:監聽子元素的冒泡事件
這裏默認是冒泡,點擊子元素li會向上冒泡
第三步:找到是哪一個子元素的事件
經過匿名回調函數來接收事件對象,經過alert驗證事件
<div> <ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> <li>6</li> <li>7</li> <li>8</li> <li>9</li> <li>10</li> </ul> </div> <script> var show=document.getElementsByTagName("ul")[0]; show.addEventListener("click",function(){ alert("hello") },false) </script>
如圖所示圖片
咱們在上文寫了冒泡事件 既然它能冒泡 若是咱們不想用這個效果了 那麼咱們有辦法阻止它嗎?答案是確定的。咱們直接看代碼,可以更加明瞭ip
<body> <div id="box1"> <div id="box2"></div> </div> </body> <script> var box1 = document.getElementById("box1"); var box2 = document.getElementById("box2"); box1.addEventListener("click", function () { alert("我是第box1") }) box2.addEventListener("click", clickStop) //設置函數 阻止box2冒泡事件 當點擊第二次時 阻止冒泡事件 var num = 0; function clickStop() { if (num >= 1) { box2.addEventListener(clickStop) } else { alert("我是box2"); num++; } } </script>
第一次點擊
當咱們第二次點擊的時候 只會彈出一個box1 ,阻止了box2的第二次冒泡開發
在咱們網頁中 若是咱們點擊右鍵是否是會彈出一個框,這裏我不會截圖 就不給你們展現了,裏面會有刷新、粘貼、複製、剪切等等按鈕 這個就是瀏覽器的右鍵默認事件,咱們來嘗試下看能不能把它給阻止了。
<script> var box = document.getElementsByClassName("box")[0]; window.oncontextmenu = function (event) { //關閉右鍵瀏覽器默認樣式 event.preventDefault(); } </script>
有興趣的話咱們還能夠把它變成本身的
<style>
{ margin: 0; padding: 0; } .box { width: 100px; display: none; position: relative; } ul { list-style: none; border: 1px solid rgb(85, 74, 74); } ul li { line-height: 30px; } .box ul li:hover { background: rgb(224, 208, 208); } </style
<div class="box">
<ul> <li>從新加載</li> <li>返回上一頁</li> <li>另存爲</li> <li>翻成中文</li> <li>投射頁面</li> </ul> </div> <script> var box = document.getElementsByClassName("box")[0]; window.oncontextmenu = function (event) { //關閉右鍵瀏覽器默認樣式 event.preventDefault(); //設置本身的樣式 var x = event.clientX; var y = event.clientY; box.style.left = x + "px"; box.style.top = y + "px"; box.style.display = "block"; } window.onclick = function () { box.style.display = "none" } </script>
在頁面中點擊右鍵就變成了下面這個效果
DOM3級事件中定義了9個鼠標事件。
click:點擊觸發 鼠標左鍵或者回車鍵
mousedown:鼠標按鈕被按下時觸發。不能經過鍵盤觸發。
mouseup:鼠標按鈕彈起時觸發,一樣不能被鍵盤觸發
dblclick:雙擊鼠標左鍵時觸發。
mouseover:鼠標移入目標範圍中。鼠標移到其後代元素上時會觸發。
mouseout:鼠標移出目標元素上方。
mouseenter:鼠標移入元素範圍內觸發,該事件不冒泡,即鼠標移到其後代元素上時不會觸發。
mouseleave:鼠標移出元素範圍時觸發,該事件不冒泡,即鼠標移到其後代元素時不會觸發。
mousemove:鼠標在元素內部移到時不斷觸發。
下面給你們列舉幾個
<div id="box"></div> <script> var box=document.getElementById("box"); //鼠標點擊事件 box.onclick=function(){ alert("hello") } </script>
mouseup:鼠標按鈕彈起時觸發,一樣不能被鍵盤觸發
<style> #box{ width: 200px; height: 200px; background: gray; margin: 100px auto; } </style> </head> <body> <div id="box"></div> <script> var box=document.getElementById("box"); // 鼠標擡起時觸發 box.onmouseup=function(){ alert("鼠標擡起") } </script>
mouseover:鼠標移入目標範圍中。鼠標移到其後代元素上時會觸發
//當鼠標進入box區域彈出顯示框
box.onmouseover=function(){ alert("我進來了") }
mousemove:鼠標在元素內部移到時不斷觸發。
box.onmousemove=function(){ console.log("自由的行走") } 會不斷的被觸發,移動一次觸發一次![圖片描述][9]
keydown():
按鍵按下時,會觸發該事件;
<body>
<input type="text" id="btn"> <script> //onkeyup 鼠標擡起 觸發 var btn=document.getElementById("btn"); btn.onkeydown=function(){ // console.log(222); } </script>
2. keyup(); 按鍵鬆開時,會觸發該事件;
<body>
<input type="text" id="btn"> <script> //onkeyup 鼠標擡起 觸發 var btn=document.getElementById("btn"); btn.onkeyup=function(event){ console.log(111); } </script>
3. keypress(); 敲擊按鍵時觸發,和keyup()大體相同 我找了不少資料 卻仍是沒有明確的區別 但願有大佬指點下
<body> <input type="text" id="btn"> <script> //onkeyup 鼠標擡起 觸發 var btn=document.getElementById("btn"); btn.onkeypress=function(event){ console.log(111); } </script>
1.onload 文檔加載完成後執行函數
<script> window.onload = function (event) { console.log(event) } </script>
2.select 被選中的時候使用 個人理解是在input中 選中的時候
<input type="text" id="one"> <script> var one = document.getElementById("one"); one.onselect=function(){ console.log("你瞅啥")// 在文本框中輸入文本 選中時顯示 } </script>
3.onchange 當內容失去焦點的時候或者改變的時候觸發
<input type="text" id="one"> <script> var one = document.getElementById("one"); one.onchange=function(){ console.log("hello") //當把焦點從文本框中挪移出 好比回車或者點擊空白區域 } </script>
<input type="text" id="one"> <script> var one = document.getElementById("one"); one.onfocus=function(){ console.log("hello") //把鼠標點擊到文本框中控制檯輸出 } </script>
5.resize 窗口變化時
<input type="text" id="one"> <script> window.onresize=function(){ console.log("變化了") //變化窗口大小 控制檯輸出 } </script>
以上就是我對js事件的理解,首先謝謝您的觀看,文中若是有些不周到的地方還請指點一下,碼字不易,請各位多多支持。