Day23 js應(yīng)用

1 DOM操作

1.1 DOM簡介

DOM(document object mode的縮寫) - 文本對(duì)象模型

  • document對(duì)象: js會(huì)將整個(gè)當(dāng)前網(wǎng)頁轉(zhuǎn)換成一個(gè)js對(duì)象叫document; 如果想要通過js獲取網(wǎng)頁中的內(nèi)容翼闽,必須通過document來獲炔肝亍(這個(gè)對(duì)象系統(tǒng)自動(dòng)創(chuàng)建,程序員只需要使用)
  • document結(jié)構(gòu): 是一個(gè)樹結(jié)構(gòu), document下是body標(biāo)簽節(jié)點(diǎn),再往下是各個(gè)其它標(biāo)簽節(jié)點(diǎn)(Node, 是js中Element對(duì)象指向的是html中的標(biāo)簽);Element對(duì)象有哪些屬性淌铐,就看Element對(duì)應(yīng)的標(biāo)簽有哪些html屬性

1.2 DOM節(jié)點(diǎn)操作

1.2.1 獲取節(jié)點(diǎn)

  • 直接獲取
    • 通過id值來獲取節(jié)點(diǎn): document.getElementById(id屬性值) - 返回是標(biāo)簽對(duì)應(yīng)的節(jié)點(diǎn)對(duì)象
      • HTML標(biāo)簽在js全部都是對(duì)象堡掏,標(biāo)簽的屬性就是對(duì)象的屬性购城;雙標(biāo)簽的內(nèi)容對(duì)應(yīng)是innerText和innerHTML屬性
      • innerHTML指向的是內(nèi)容的文本和標(biāo)簽吕座; innerText只指向內(nèi)容中的文本
    • 通過class值獲取節(jié)點(diǎn):document.getElementsByClassName(class屬性值) - 返回一個(gè)數(shù)組
    • 通過標(biāo)簽名獲取節(jié)點(diǎn): document.getElementsByTagName(標(biāo)簽名) - 返回一個(gè)數(shù)組
    • 通過name屬性獲取節(jié)點(diǎn)(被淘汰): document.getElementsByName(name屬性值)
  • 獲取父節(jié)點(diǎn): 節(jié)點(diǎn).parentElement - 獲取指定節(jié)點(diǎn)對(duì)應(yīng)的父節(jié)點(diǎn)
  • 獲取子節(jié)點(diǎn)
    • 獲取所有子節(jié)點(diǎn): 節(jié)點(diǎn).children - 獲取自定節(jié)點(diǎn)所有的子節(jié)點(diǎn)(不會(huì)獲取孫子節(jié)點(diǎn))
    • 獲取第一個(gè)子節(jié)點(diǎn): 節(jié)點(diǎn).firstElementChild
    • 獲取最后一個(gè)子節(jié)點(diǎn): 節(jié)點(diǎn).lastElementChild

1.2.2 創(chuàng)建節(jié)點(diǎn)

  • document.createElement(標(biāo)簽名) - 創(chuàng)建指定標(biāo)簽對(duì)象的節(jié)點(diǎn)對(duì)象
  • 注意: 創(chuàng)建的節(jié)點(diǎn)在沒有添加在網(wǎng)頁中的時(shí)候是不會(huì)顯示的

1.2.3 添加節(jié)點(diǎn)

  • 節(jié)點(diǎn)1.appendChild(節(jié)點(diǎn)2) - 在節(jié)點(diǎn)1的最后添加節(jié)點(diǎn)2
  • 節(jié)點(diǎn)1.insertBefore(節(jié)點(diǎn)2, 節(jié)點(diǎn)3) - 在節(jié)點(diǎn)1中的節(jié)點(diǎn)3前出入節(jié)點(diǎn)2

1.2.4 拷貝節(jié)點(diǎn)

  • 節(jié)點(diǎn).cloneNode() - 賦值指定節(jié)點(diǎn),產(chǎn)生一個(gè)新的節(jié)點(diǎn)

1.2.5 刪除節(jié)點(diǎn)

  • 節(jié)點(diǎn)1.removeChild(節(jié)點(diǎn)2) - 刪除節(jié)點(diǎn)1中的節(jié)點(diǎn)2
  • 節(jié)點(diǎn).remove() - 刪除指定節(jié)點(diǎn)
    <body>
        
        <p id="p1" class="c1">我是段落</p>
        <img class="c1" src="img/luffy.jpg"/>
        <div id="div1">
            我是div
            <p>我是段落2</p>
        </div>
        
        <div id="div2">
            <h1 id="h1">我是標(biāo)題1</h1>
            <h1 id="h2">我是標(biāo)題2</h1>
        </div>

        <script type="text/javascript">
            // 1. 獲取節(jié)點(diǎn)
            // 1.1 直接獲取
            // a) 通過id值來獲取節(jié)點(diǎn): document.getElementById(id屬性值)  - 返回是標(biāo)簽對(duì)應(yīng)的節(jié)點(diǎn)對(duì)象
            //補(bǔ)充: HTML標(biāo)簽在js全部都是對(duì)象瘪板,標(biāo)簽的屬性就是對(duì)象的屬性吴趴;雙標(biāo)簽的內(nèi)容對(duì)應(yīng)是innerText和innerHTML屬性
            //      innerHTML指向的是內(nèi)容的文本和標(biāo)簽; innerText只指向內(nèi)容中的文本
            pNode = document.getElementById('p1')
            console.log(pNode, typeof(pNode), pNode.id, pNode.innerHTML, pNode.innerText)
            
            divNode = document.getElementById('div1')
            console.log('html:',divNode.innerHTML, typeof(divNode.innerHTML))
            console.log('text:', divNode.innerText)
            
//          divNode.innerText = "<a 
//          divNode.innerHTML = "<a 

            divNode.innerHTML = "<p id='p2'>我是段落3</p>"
            
            //b) 通過class值獲取節(jié)點(diǎn): document.getElementsByClassName(class屬性值) - 返回一個(gè)數(shù)組
            c1NodeArray = document.getElementsByClassName('c1')
            console.log(c1NodeArray)
            //根據(jù)下標(biāo)獲取元素
            imgNode = c1NodeArray[1]
            imgNode.title = '路飛'
            
            //c) 通過標(biāo)簽名獲取節(jié)點(diǎn): document.getElementsByTagName(標(biāo)簽名) - 返回一個(gè)數(shù)組 
            pNodes = document.getElementsByTagName('p')
            console.log(pNodes)
             
            //d)通過name屬性獲取節(jié)點(diǎn)(被淘汰): document.getElementsByName(name屬性值)
            //document.getElementsByName()
            
            //1.2獲取父節(jié)點(diǎn)
            // 節(jié)點(diǎn).parentElement  - 獲取指定節(jié)點(diǎn)對(duì)應(yīng)的父節(jié)點(diǎn)
            bodyNode = pNode.parentElement
            console.log(bodyNode)
            
            //1.3獲取子節(jié)點(diǎn)
            //a)獲取所有子節(jié)點(diǎn): 節(jié)點(diǎn).children  - 獲取自定節(jié)點(diǎn)所有的子節(jié)點(diǎn)(不會(huì)獲取孫子節(jié)點(diǎn))
            children1 = bodyNode.children
            console.log(children1)
            
            //b)獲取第一個(gè)子節(jié)點(diǎn): 節(jié)點(diǎn).firstElementChild
             firstNode = bodyNode.firstElementChild
             console.log(firstNode)
             
             //c)獲取最后一個(gè)子節(jié)點(diǎn): 節(jié)點(diǎn).lastElementChild
             lastNode = bodyNode.lastElementChild
             console.log(lastNode)  
             
            // 2.創(chuàng)建節(jié)點(diǎn)
            //document.createElement(標(biāo)簽名)  - 創(chuàng)建指定標(biāo)簽對(duì)象的節(jié)點(diǎn)對(duì)象
            //注意: 創(chuàng)建的節(jié)點(diǎn)在沒有添加在網(wǎng)頁中的時(shí)候是不會(huì)顯示的
            inputNode = document.createElement('input')
            
            //3.添加節(jié)點(diǎn)
            div2Node = document.getElementById('div2')
            
            // 節(jié)點(diǎn)1.appendChild(節(jié)點(diǎn)2) - 在節(jié)點(diǎn)1的最后添加節(jié)點(diǎn)2
            div2Node.appendChild(inputNode)
            
            // 節(jié)點(diǎn)1.insertBefore(節(jié)點(diǎn)2, 節(jié)點(diǎn)3) - 在節(jié)點(diǎn)1中的節(jié)點(diǎn)3前出入節(jié)點(diǎn)2
            div2Node.insertBefore(inputNode, div2Node.firstElementChild)
            
            // 4.拷貝節(jié)點(diǎn)
            // 節(jié)點(diǎn).cloneNode()  - 賦值指定節(jié)點(diǎn)侮攀,產(chǎn)生一個(gè)新的節(jié)點(diǎn)
            inputNode2 = inputNode.cloneNode()
            inputNode2.placeholder = '新節(jié)點(diǎn)'
            div2Node.appendChild(inputNode2)
            
            //5.刪除節(jié)點(diǎn)
            //a)節(jié)點(diǎn)1.removeChild(節(jié)點(diǎn)2)  -  刪除節(jié)點(diǎn)1中的節(jié)點(diǎn)2
            div2Node.removeChild(div2Node.firstElementChild)
            
            //b)節(jié)點(diǎn).remove() - 刪除指定節(jié)點(diǎn)
            div2Node.remove()           
        </script>
    </body>

練習(xí) 有個(gè)三行三列的表格锣枝,實(shí)現(xiàn)以下功能

  • 用js將table的背景顏色設(shè)置為隨機(jī)顏色
  • 將第一列的文字顏色全部變成紅色
  • 在最后插入一行表格,內(nèi)容分別是 41兰英,42撇叁,43
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <table id="t1" border="" cellspacing="" cellpadding="">
            <tr id="tr1">
                <td>11</td>
                <td>12</td>
                <td>13</td>
            </tr>
            <tr id="tr2">
                <td>21</td>
                <td>22</td>
                <td>23</td>
            </tr>
            <tr id="tr3">
                <td>31</td>
                <td>32</td>
                <td>33</td>
            </tr>
            
        </table>

        <script type="text/javascript">
            /*
            //產(chǎn)生1-10的隨機(jī)整數(shù)
            randomNum = parseInt(Math.random()*9+1)
            console.log(randomNum)
            
            //產(chǎn)生0-255的隨機(jī)整數(shù)
            randomNum = parseInt(Math.random()*255)
            console.log(randomNum)
            */
            //1)用js將table的背景顏色設(shè)置為隨機(jī)顏色
            //獲取table節(jié)點(diǎn)
            tableNode = document.getElementById('t1')
            //產(chǎn)生隨機(jī)顏色值
            red = parseInt(Math.random()*255)
            green = parseInt(Math.random()*255)
            blue = parseInt(Math.random()*255)
            //設(shè)置背景顏色屬性
            tableNode.style.backgroundColor = 'rgba('+red+','+green+','+blue+','+'0.1)'
            
            //2)將第一列的文字顏色全部變成紅色
            //拿所有的tr
            trNodes = document.getElementsByTagName('tr')
            console.log(trNodes)
            for(x in trNodes){
                console.log(x,"length")
                if(x == 'length'){
                    break
                }
                //獲取每個(gè)tr
                trNode = trNodes[x]
                //獲取每一行的第一個(gè)td
                tdNode = trNode.firstElementChild
                //修改文字顏色
                //tdNode.style.color = 'red'
                tdNode.style = 'color:red; font-size:25px'
            }
            
            //3)在最后插入一行表格,內(nèi)容分別是 41畦贸,42陨闹,43
            trNode = document.createElement('tr')
            tdNode = document.createElement('td')
            tdNode.innerText = '41'
            trNode.appendChild(tdNode)
            
            tdNode = tdNode.cloneNode()
            tdNode.innerText = '42'
            trNode.appendChild(tdNode)
            
            tdNode = tdNode.cloneNode()
            tdNode.innerText = '43'
            trNode.appendChild(tdNode)
//          for(x=1;x<=3;x++){
//              tdNode = document.createElement('td')
//              tdNode.innerText = '4'+x
//              trNode.appendChild(tdNode)
//          }
//          
            tableNode.appendChild(trNode)
                    
        </script>
    </body>
</html>

2 BOM操作

2.1 什么是BOM

  • BOM(browser object model)瀏覽器對(duì)象模型
  • js自帶一個(gè)window對(duì)象,指向當(dāng)前瀏覽器薄坏;js中所有的全局變量都是綁定在window對(duì)象上的屬性
  • 在使用的時(shí)候趋厉,window可以省略

2.2 window基本操作

2.2.1 打開新的窗口:open(url, name屬性, 窗口大小 )

  • 打開新的窗口: open(url) - 在新的窗口中打開新頁面
  • 打開新的窗口, 同時(shí)設(shè)置窗口的寬度和高度

2.2.2 關(guān)閉窗口

  • 窗口對(duì)象.close()
    • window.close() / close() - 關(guān)閉當(dāng)前窗口
    • 關(guān)閉其他窗口 窗口對(duì)象.close()

2.2.3 移動(dòng)當(dāng)前窗口 只對(duì)設(shè)置了寬高的窗口有效

窗口對(duì)象.moveTo(x, y)

2.2.4 獲取窗口的寬度和高度

  • innerWidth/innerHeight - 獲取瀏覽器能夠顯示內(nèi)容的部分的寬高
  • outerWidth/outerHeight - 整個(gè)瀏覽器的寬高

2.2.5 彈框

  • 只有確定按鈕再加提示信息的彈框: alert('提示信息!')
  • 一個(gè)提示信息,再加確定和取消按鈕胶坠;根據(jù)返回值是true還是false來判斷選擇是確定還是取消: confirm('是否刪除?')
  • 一個(gè)提示信息君账,再加一個(gè)輸入框和取消確定按鈕;根據(jù)返回值是否是null來判斷點(diǎn)擊的是取消還是確定: prompt('提示信息','輸入框中默認(rèn)值')
<script type="text/javascript">
    //1.什么是BOM
    //BOM(browser object model)瀏覽器對(duì)象模型
    //js自帶一個(gè)window對(duì)象沈善,指向當(dāng)前瀏覽器乡数;js中所有的全局變量都是綁定在window對(duì)象上的屬性
    //在使用的時(shí)候,window可以省略
    num = 10    // 相當(dāng)于window.num = 10
    console.log(window.num, num)
    
    function func1(){
        console.log('我是函數(shù)')
    }
    window.func1()
    
    //2.window基本操作
    //1) 打開新的窗口
    //open(url, name屬性, 窗口大小 )
    //a)打開新的窗口: open(url) - 在新的窗口中打開新頁面, 
    //new_window = window.open('https://www.baidu.com')
    //console.log(new_window)
    //b) 打開新的窗口, 同時(shí)設(shè)置窗口的寬度和高度
    //new_window2 = open('https://www.baidu.com','','width=400,height=300')
    
    //2)關(guān)閉窗口
    //窗口對(duì)象.close()
    //window.close() / close()  - 關(guān)閉當(dāng)前窗口
    //close()
    
    //關(guān)閉其他窗口
    //new_window2.close()
    
    //3)移動(dòng)當(dāng)前窗口
    //new_window2.moveTo(100, 100)
    
    //4)獲取窗口的寬度和高度
    // innerWidth/innerHeight  - 獲取瀏覽器能夠顯示內(nèi)容的部分的寬高
    //console.log(new_window2.innerWidth, new_window2.innerHeight)
    // outerWidth/outerHeight - 整個(gè)瀏覽器的寬高
    //console.log(new_window2.outerWidth, new_window2.outerHeight)  
    
    //3.彈框
    //1) 只有確定按鈕再加提示信息的彈框
    alert('提示信息!')
    
    //2)一個(gè)提示信息闻牡,再加確定和取消按鈕净赴;根據(jù)返回值是true還是false來判斷選擇是確定還是取消
    result = confirm('是否刪除?')
    console.log(result)
    
    //3)一個(gè)提示信息,再加一個(gè)輸入框和取消確定按鈕罩润;根據(jù)返回值是否是null來判斷點(diǎn)擊的是取消還是確定
    result = prompt('提示信息','輸入框中默認(rèn)值')
    console.log(result)
</script>

3 定時(shí)事件

3.1 開啟定時(shí)

  • setTimeout(函數(shù), 定時(shí)時(shí)間, 實(shí)參列表) - 指定時(shí)間后調(diào)用指定函數(shù)劫侧,并且傳入指定的參數(shù); 返回一個(gè)定時(shí)器對(duì)象
    • 函數(shù) - 可以是匿名函數(shù),也可以是普通函數(shù)的函數(shù)名
    • 定時(shí)時(shí)間 - 單位是毫秒
    • 實(shí)參列表 - 函數(shù)提供參數(shù)
  • setInterval(函數(shù),定時(shí)時(shí)間哨啃,參數(shù)列表) - 每隔指定的時(shí)間調(diào)用一次函數(shù)

3.2 清除定時(shí)

  • clearTimeout(定時(shí)對(duì)象)
  • clearInterval(定時(shí)對(duì)象)
<script type="text/javascript">
    //1. 開啟定時(shí)
    t1 = setTimeout(function(){
        console.log('時(shí)間到!')
    }, 1000)
    
    t2 = setTimeout(function(name, age){
        console.log(name, age)
    }, 3000, '小明', 18)
    
    //t1和t3的功能一樣
    function timeFunc(){
        console.log('時(shí)間到了')
    }
    t3 = setTimeout(timeFunc, 1000)
    
    /*
     2)setInterval(函數(shù),定時(shí)時(shí)間写妥,參數(shù)列表) - 每隔指定的時(shí)間調(diào)用一次函數(shù)
     */
    num = 1
    t4 = setInterval(function(){
        num ++
        console.log('~~~~:',num)
        if(num == 10){
            clearInterval(t4)
        }
    }, 2000)
    
    // 2.清除定時(shí)
    //clearTimeout(定時(shí)對(duì)象)
    clearTimeout(t2)
    //clearInterval(定時(shí)對(duì)象)
</script>

練習(xí): 實(shí)現(xiàn)5s后自動(dòng)跳轉(zhuǎn)到百度頁面

    <body>
        <p id="p1">5秒后自動(dòng)跳轉(zhuǎn)</p>
        
        <script type="text/javascript">
            time = 5
            pNode = document.getElementById('p1')
            t1 = setTimeout(function(){
                time--
                pNode.innerText = time+'秒后自動(dòng)跳轉(zhuǎn)'
                if(time == 0){
                    open('https://www.baidu.com')
                    clearInterval(t1)
                }           
            }, 1000)
        </script>
    </body>

4 事件

4.1 事件簡介

  • js是事件驅(qū)動(dòng)語言
  • 事件三要素: 事件源拳球、事件、事件驅(qū)動(dòng)程序
  • 事件源發(fā)送某個(gè)事件就做什么事情(事件驅(qū)動(dòng)程序)

4.2 事件的綁定

  • 在標(biāo)簽內(nèi)部給標(biāo)簽的事件屬性賦值
    注意: 這種方式綁定的時(shí)候珍特,this指向的是window
  • 通過給節(jié)點(diǎn)對(duì)象的事件屬性賦值來綁定
    注意: 這種方式綁定的時(shí)候祝峻,this指向的是事件源
  • 通過addEventListener方法進(jìn)行綁定
    • 語法
      • 事件源節(jié)點(diǎn).addEventListener(事件名稱,事件驅(qū)動(dòng)程序)
    • 說明
      • 事件名稱 - 事件屬性名去掉on
      • 事件驅(qū)動(dòng)程序 - 事件發(fā)生后需要調(diào)用的函數(shù)
    • 注意
      • this是事件源
      • 可以給同一個(gè)節(jié)點(diǎn)的同一個(gè)事件綁定不同的事件驅(qū)動(dòng)程序
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <!--事件綁定方式1(不推薦使用)-->
        <button onclick="alert('你好!')">按鈕1</button>
        <button id="btn1" onclick="btnClick()">刪除1</button>
        <button id="btn2" onclick="btnClick()">刪除2</button>
        <br /><br />
        
        <!--事件綁定方式2(推薦使用)-->
        <button id="btn3">刪除</button>
        <button class="btn1">刪除3</button>
        <button class="btn1">刪除4</button>
        <button class="btn1">刪除5</button>
        <br /><br />
        
        <!--事件綁定方式3(推薦使用)-->
        <button id="btn4">按鈕</button>
        
    </body>
</html>

<script type="text/javascript">
    // 1) 在標(biāo)簽內(nèi)部給標(biāo)簽的事件屬性賦值
    // 注意: 這種方式綁定的時(shí)候,this指向的是window
    function btnClick(){
        console.log(this)
        result = confirm('是否刪除?')
        if(result){
            document.getElementById('btn1').remove()
        }
    }   
    // 2) 通過給節(jié)點(diǎn)對(duì)象的事件屬性賦值來綁定
    // 注意: 這種方式綁定的時(shí)候莱找,this指向的是事件源
    btnNode = document.getElementById('btn3')
    // 給事件屬性賦函數(shù)名
    btnNode.onclick = btnClick     
    
    //獲取所有class值是btn1的標(biāo)簽對(duì)應(yīng)的節(jié)點(diǎn)
    btn1Nodes = document.getElementsByClassName('btn1')
    for(x=0;x<btn1Nodes.length;x++){
        btn1Node = btn1Nodes[x]
        // 給事件屬性賦匿名函數(shù)
        btn1Node.onclick = function(){
            console.log(this)
            result = confirm('是否刪除?')
            if(result){
                this.remove()
            }
        }
    }   
    // 3)通過addEventListener方法進(jìn)行綁定
    btnNode4 = document.getElementById('btn4')
    btnNode4.addEventListener('click', function(){
        console.log(this)
        alert('你好酬姆!')
    })
    btnNode4.addEventListener('click', function(){
        this.style.color = 'red'
    })
</script>

5 常見事件類型

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script type="text/javascript">
            //1.onload事件 - 頁面加載完成對(duì)應(yīng)的事件(標(biāo)簽加載成功)
            window.onload = function(){
                //寫在這兒的代碼,在頁面加載完成后才會(huì)執(zhí)行
                pNode = document.getElementById('p1')
                console.log(pNode)
            }
        </script>
    </head>
    <body>
        <p id="p1">我是段落</p>
        <input type="" name="input1" id="input1" value="" />
        <input type="" name="input2" id="input2" value="" />
    </body>
</html>

<script type="text/javascript">
    //2.鼠標(biāo)事件
    pNode = document.getElementById('p1')
    // 1)onclick - 鼠標(biāo)點(diǎn)擊事件
    pNode.onclick = function(evt){
        alert('p標(biāo)簽被點(diǎn)擊')
        console.log(evt)
    }
    
    //2)onmouseover - 鼠標(biāo)懸停事件
    pNode.onmouseover = function(){
        //alert('鼠標(biāo)移動(dòng)到標(biāo)簽上')
        this.style = 'background-color:yellow'
    }
    
    //3) onmouseout - 鼠標(biāo)離開事件
    pNode.onmouseout = function(){
        this.style = 'background-color:pink'
    }
    
    //3.鍵盤事件
    //鍵盤事件一般綁定在輸入框?qū)?yīng)的標(biāo)簽上
    //1)onkeypress - 按下彈起
    inputNode = document.getElementById('input1')
    inputNode.onkeypress = function(evt){
        console.log('鍵盤按下彈起')
        console.log(evt)
    }
    
    //2)onkeydown - 按鍵按下 奥溺、 onkeyup - 按鍵彈起
    inputNode.onkeydown = function(){
        console.log('鍵盤按下')
    }
    inputNode.onkeyup = function(){
        console.log('鍵盤彈起')
    }
    
    //4.輸入框事件
    //onchange - 輸入框中的輸入內(nèi)容的時(shí)候按回車
    inputNode2 = document.getElementById('input2')
    inputNode2.onchange = function(evt){
        console.log('內(nèi)容發(fā)生改變')
        console.log(evt)
    }
    
    //oninput - 正在輸入
    inputNode2.oninput = function(){
        console.log('正在輸入')
    }       
    //5.事件對(duì)象
    /*
    每個(gè)事件驅(qū)動(dòng)程序中辞色,都可以設(shè)置一個(gè)參數(shù)來表示當(dāng)前事件對(duì)象。不同類型的事件對(duì)應(yīng)事件類型和事件屬性不同
    1)鼠標(biāo)事件對(duì)象
    clientX/clientY  - 鼠標(biāo)的位置到瀏覽器左邊和頂部的距離
    offsetX/offsetY  - 鼠標(biāo)的位置到事件源標(biāo)簽左邊和頂部的距離
    
    2)鍵盤事件對(duì)象
    key - 哪個(gè)按鍵被按下
    */
</script>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末浮定,一起剝皮案震驚了整個(gè)濱河市相满,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌桦卒,老刑警劉巖立美,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異方灾,居然都是意外死亡建蹄,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門裕偿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來洞慎,“玉大人,你說我怎么就攤上這事击费÷5埃” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵蔫巩,是天一觀的道長谆棱。 經(jīng)常有香客問我,道長圆仔,這世上最難降的妖魔是什么垃瞧? 我笑而不...
    開封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮坪郭,結(jié)果婚禮上个从,老公的妹妹穿的比我還像新娘。我一直安慰自己歪沃,他們只是感情好嗦锐,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著沪曙,像睡著了一般奕污。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上液走,一...
    開封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天碳默,我揣著相機(jī)與錄音贾陷,去河邊找鬼。 笑死嘱根,一個(gè)胖子當(dāng)著我的面吹牛髓废,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播该抒,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼慌洪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了柔逼?” 一聲冷哼從身側(cè)響起蒋譬,我...
    開封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎愉适,沒想到半個(gè)月后犯助,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡维咸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年剂买,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片癌蓖。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡瞬哼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出租副,到底是詐尸還是另有隱情坐慰,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布用僧,位于F島的核電站结胀,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏责循。R本人自食惡果不足惜糟港,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望院仿。 院中可真熱鬧秸抚,春花似錦、人聲如沸歹垫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽排惨。三九已至吭敢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間若贮,已是汗流浹背省有。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谴麦,地道東北人蠢沿。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像匾效,于是被迫代替她去往敵國和親舷蟀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

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