js原生6--事件

事件對(duì)象

鼠標(biāo)事件

event.clientX在可視區(qū)中喜庞,鼠標(biāo)點(diǎn)擊的x坐標(biāo)

event.clientY在可視區(qū)中催什,鼠標(biāo)點(diǎn)擊的y坐標(biāo)

示例:

? ? ? ? document.onclick = function? () {

? ? ? ? ? ? alert(event.clientX + ',' + event.clientY);

? ? ? ? }

示例:一個(gè)跟隨鼠標(biāo)指針移動(dòng)的紅色塊

demo.gif

? ? ? ? #div {

? ? ? ? ? ? width: 100px;

? ? ? ? ? ? height: 100px;

? ? ? ? ? ? background-color :red;

? ? ? ? ? ? position: absolute;

? ? ? ? }

? ? ? ? // 鼠標(biāo)移動(dòng)時(shí)觸發(fā)改事件

? ? ? ? document.onmousemove = function? (ev) {

? ? ? ? ? ? // 獲取距離文檔頂部的高度

? ? ? ? ? ? var oScrollTop = document.documentElement.scrollTop || document.body.scrollTop;

? ? ? ? ? ? // 獲取距離文檔左邊的的寬度

? ? ? ? ? ? var oScrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft;

? ? ? ? ? ? // 獲取鼠標(biāo)事件

? ? ? ? ? ? var oEvent = event || ev;

? ? ? ? ? ? // 獲取到div

? ? ? ? ? ? var oDiv = document.getElementById('div');

? ? ? ? ? ? // 設(shè)置div的位置

? ? ? ? ? ? oDiv.style.left = oEvent.clientX + oScrollLeft + 'px';

? ? ? ? ? ? oDiv.style.top = oEvent.clientY + oScrollTop + 'px';

? ? ? ? }

示例:一串跟著鼠標(biāo)走的div

demo.gif

? ? ? ? #div {

? ? ? ? ? ? width: 10px;

? ? ? ? ? ? height: 10px;

? ? ? ? ? ? background-color :red;

? ? ? ? ? ? position: absolute;

? ? ? ? }

? ? ? ? // 鼠標(biāo)移動(dòng)時(shí)觸發(fā)改事件

? ? ? ? window.onload = function? () {

? ? ? ? ? ? var oDivs = document.getElementsByTagName('div');

? ? ? ? ? ? document.onmousemove = function? (ev) {

? ? ? ? ? ? ? ? var oEvent = ev || event;

? ? ? ? ? ? ? ? oDivs[0].style.left = oEvent.clientX+'px';

? ? ? ? ? ? ? ? oDivs[0].style.top = oEvent.clientY+'px';

? ? ? ? ? ? ? ? for (var i = oDivs.length-1; i > 0; i--) {

? ? ? ? ? ? ? ? ? ? oDivs[i].style.left = oDivs[i-1].style.left;

? ? ? ? ? ? ? ? ? ? oDivs[i].style.top = oDivs[i-1].style.top;

? ? ? ? ? ? ? ? };

? ? ? ? ? ? }

? ? ? ? }

鍵盤事件

keyCode獲取用戶按下鍵盤的哪個(gè)按鍵

如:鍵盤控制DIV移動(dòng)

ctrlKey 返回boolean值,按下時(shí)為true

shiftKey 返回boolean值川背,按下時(shí)為true

altKey 返回boolean值速缆,按下時(shí)為true

示例:用提示框?qū)⒂脩舭吹陌存I提示出來(lái):

demo.gif

? ? ? ? // 按動(dòng)鍵盤時(shí)觸發(fā)事件

? ? ? ? document.onkeydown = function (ev) {

? ? ? ? ? ? var oEvent = ev || event;

? ? ? ? ? ? // 獲取到按動(dòng)的是哪個(gè)按鍵

? ? ? ? ? ? alert(oEvent.keyCode);

? ? ? ? }

示例:通過(guò)上下左右按鍵控制DIV的移動(dòng)

demo.gif

? ? ? ? #div1 {

? ? ? ? ? ? width: 100px;

? ? ? ? ? ? height: 100px;

? ? ? ? ? ? left:10px;

? ? ? ? ? ? top:10px;

? ? ? ? ? ? background-color: gray;

? ? ? ? ? ? position: absolute;

? ? ? ? }

? ? ? ? document.onkeydown = function? (ev) {

? ? ? ? ? ? var oEvent = ev || event;

? ? ? ? ? ? var oDiv = document.getElementById('div1');

? ? ? ? ? ? if (oEvent.keyCode == 37) {

? ? ? ? ? ? ? ? oDiv.style.left =? oDiv.offsetLeft - 10 +'px';

? ? ? ? ? ? } else if (oEvent.keyCode==38) {

? ? ? ? ? ? ? ? oDiv.style.top = oDiv.offsetTop - 10 +'px';

? ? ? ? ? ? } else if (oEvent.keyCode == 39) {

? ? ? ? ? ? ? ? oDiv.style.left = oDiv.offsetLeft + 10 +'px';

? ? ? ? ? ? } else if (oEvent.keyCode == 40) {

? ? ? ? ? ? ? ? oDiv.style.top = oDiv.offsetTop + 10 +'px';

? ? ? ? ? ? };

? ? ? ? }

示例:按住control+enter鍵,提交留言框中的文字到留言板中

demo.gif

? ? ? ? window.onload = function? () {

? ? ? ? ? ? var oText1 = document.getElementById('text1');

? ? ? ? ? ? var oText2 = document.getElementById('text2');

? ? ? ? ? ? var oBtn = document.getElementById('btn');

? ? ? ? ? ? // 鼠標(biāo)點(diǎn)擊提交按鈕禁荸。進(jìn)行留言

? ? ? ? ? ? oBtn.onclick = function? () {

? ? ? ? ? ? ? ? //點(diǎn)擊提交按鈕后,把留言框中的文字提交在留言區(qū)

? ? ? ? ? ? ? ? oText1.value += oText2.value + '\n';

? ? ? ? ? ? ? ? // 清空留言框

? ? ? ? ? ? ? ? oText2.value = '';

? ? ? ? ? ? };

? ? ? ? ? ? // 按下control+enter按鈕阀湿,進(jìn)行留言,因?yàn)楫?dāng)前焦點(diǎn)在留言框中赶熟,所以事件要加載留言框中

? ? ? ? ? ? oText2.onkeydown = function? (ev) {

? ? ? ? ? ? ? ? var oEvent = ev || event;

? ? ? ? ? ? ? ? // 按下回車鍵和control鍵

? ? ? ? ? ? ? ? if (oEvent.keyCode == 13 && oEvent.ctrlKey) {

? ? ? ? ? ? ? ? ? ? //點(diǎn)擊提交按鈕后,把留言框中的文字提交在留言區(qū)

? ? ? ? ? ? ? ? oText1.value += oText2.value + '\n';

? ? ? ? ? ? ? ? // 清空留言框

? ? ? ? ? ? ? ? oText2.value = '';

? ? ? ? ? ? ? ? };

? ? ? ? ? ? }

? ? ? ? }

? ?

? ?

事件冒泡

子標(biāo)簽發(fā)生事件后炕倘,向父級(jí)發(fā)送該事件,一直追溯到document翰撑。如:點(diǎn)擊一個(gè)嵌套在body中的button罩旋,則該button的onclick事件也會(huì)傳遞給body、document中眶诈,觸發(fā)他們的onclick里觸發(fā)的函數(shù).

示例:

div {

width: 100px;

height: 100px;

background-color: red;

display: none;

}

? ?

window.onload = function () {

? ? ? ? ? ? var oBtn = document.getElementById('button');

? ? ? ? ? ? var oDiv = document.getElementById('div');

? ? ? ? ? ? // 點(diǎn)擊buton后涨醋,button的事件會(huì)被觸發(fā)

? ? ? ? ? ? oBtn.onclick = function() {

? ? ? ? ? ? ? ? oDiv.style.display = 'block';

? ? ? ? ? ? ? ? alert("button被點(diǎn)擊了");

? ? ? ? ? ? }

? ? ? ? ? ? // 由于事件冒泡,作為父級(jí)的document的onclick事件也會(huì)被觸發(fā)

? ? ? ? ? ? document.onclick = function() {

? ? ? ? ? ? ? ? oDiv.style.display = 'none';

? ? ? ? ? ? ? ? alert("document被點(diǎn)擊了")

? ? ? ? ? ? }

? ? ? ? }

? ?

取消冒泡

由于事件冒泡會(huì)觸發(fā)父級(jí)的相關(guān)方法逝撬,所以我們經(jīng)常會(huì)“取消事件冒泡”浴骂。

取消事件冒泡的方法:event.cancelBubble=true

div {

width: 100px;

height: 100px;

background-color: red;

display: none;

}

? ?

window.onload = function () {

? ? ? ? ? ? var oBtn = document.getElementById('button');

? ? ? ? ? ? var oDiv = document.getElementById('div');

? ? ? ? ? ? // 點(diǎn)擊buton后,button的事件會(huì)被觸發(fā)

? ? ? ? ? ? oBtn.onclick = function(ev) {

? ? ? ? ? ? ? ? oDiv.style.display = 'block';

? ? ? ? ? ? ? ? alert("button被點(diǎn)擊了");

? ? ? ? ? ? ? ? // 在這里取消事件冒泡宪潮,防止事件向父級(jí)傳遞

? ? ? ? ? ? ? ? // 兼容性考慮溯警,有的瀏覽器的事件并不是'event',所以把點(diǎn)擊事件作為參數(shù)傳遞過(guò)來(lái)

? ? ? ? ? ? ? ? var oEvent = ev || event;

? ? ? ? ? ? ? ? oEvent.cancelBubble=true;

? ? ? ? ? ? }

? ? ? ? ? ? // 由于事件冒泡狡相,作為父級(jí)的document的onclick事件也會(huì)被觸發(fā)

? ? ? ? ? ? document.onclick = function() {

? ? ? ? ? ? ? ? oDiv.style.display = 'none';

? ? ? ? ? ? ? ? alert("document被點(diǎn)擊了")

? ? ? ? ? ? }

? ? ? ? }

? ?

事件的默認(rèn)行為

瀏覽器自帶的行為就是默認(rèn)行為

阻止默認(rèn)行為

只要將默認(rèn)的事件return false梯轻,就可以組織默認(rèn)行為的執(zhí)行。

示例:自定義右鍵菜單:默認(rèn)的右鍵菜單是系統(tǒng)提供的選項(xiàng)尽棕,我們可以阻止默認(rèn)的右菜單喳挑,來(lái)自定義新右鍵菜單樣式

ul {

list-style-type: none;

display:none;

position:absolute;

}

* {

margin: 0;

padding: 0;

}

? ?

? ? ? ? // 鼠標(biāo)右鍵觸發(fā)的時(shí)間

? ? ? ? document.oncontextmenu = function? (ev) {

? ? ? ? ? ? var oUl = document.getElementById('ul1');

? ? ? ? ? ? var oEvent = ev || event;

? ? ? ? ? ? oUl.style.display = 'block';

? ? ? ? ? ? oUl.style.left = oEvent.clientX + 'px';

? ? ? ? ? ? oUl.style.top = oEvent.clientY + 'px';

? ? ? ? ? ? return false;

? ? ? ? }

? ? ? ? // 鼠標(biāo)左鍵觸發(fā)的事件

? ? ? ? document.onclick? = function? (ev) {

? ? ? ? ? ? var oUl = document.getElementById('ul1');

? ? ? ? ? ? oUl.style.display = 'none';

? ? ? ? }

? ?

? ?

? ? ? ?

  • 首頁(yè)
  • ? ? ? ?

  • 登錄
  • ? ? ? ?

  • 注冊(cè)
  • 示例:輸入框中只能輸入數(shù)字和退格

    ? ?

    window.onload = function? () {

    var oText = document.getElementById('text');

    oText.onkeydown = function? (ev) {

    var oEvent = ev || event;

    if ( (oEvent.keyCode < 40 && oEvent.keyCode != 8) || oEvent.keyCode > 57 ) {

    return false;

    };

    ? ? ? ? ? ? }

    ? ? ? ? }

    拖拽

    拖拽時(shí),鼠標(biāo)經(jīng)歷三個(gè)事件:

    onmousedown 鼠標(biāo)按下時(shí)滔悉,存儲(chǔ)當(dāng)前鼠標(biāo)距離拖拽對(duì)象左上角的距離

    onmousemove 鼠標(biāo)移動(dòng)時(shí)伊诵,根據(jù)鼠標(biāo)移動(dòng)的距離移動(dòng)拖拽對(duì)象的位置

    onmouseup 鼠標(biāo)抬起時(shí),停止拖拽

    示例:鼠標(biāo)拖拽一個(gè)div

    demo.gif

    #div1 {

    width: 100px;

    height: 100px;

    background-color : red;

    position: absolute;

    }

    ? ?

    window.onload = function? () {

    ? ? ? ? ? ? var oDiv = document.getElementById('div1');

    ? ? ? ? ? ? // 當(dāng)鼠標(biāo)按下時(shí)計(jì)算鼠標(biāo)距離div左上角的位置

    ? ? ? ? ? ? oDiv.onmousedown = function? (ev) {

    ? ? ? ? ? ? ? ? var oEvent = ev || event;

    ? ? ? ? ? ? ? ? var oX = oEvent.clientX - oDiv.offsetLeft;

    ? ? ? ? ? ? ? ? var oY = oEvent.clientY - oDiv.offsetTop;

    ? ? ? ? ? ? ? ? // 當(dāng)鼠標(biāo)開始移動(dòng)回官,重新設(shè)置div的位置

    ? ? ? ? ? ? ? ? document.onmousemove = function? (ev) {

    ? ? ? ? ? ? ? ? ? ? var oEvent = ev || event;

    ? ? ? ? ? ? ? ? ? ? oDiv.style.left = oEvent.clientX - oX + 'px';

    ? ? ? ? ? ? ? ? ? ? oDiv.style.top = oEvent.clientY - oY + 'px';

    ? ? ? ? ? ? ? ? };

    ? ? ? ? ? ? ? ? // 當(dāng)鼠標(biāo)抬起曹宴,結(jié)束移動(dòng),清除移動(dòng)事件的函數(shù)

    ? ? ? ? ? ? ? ? document.onmouseup = function? () {

    ? ? ? ? ? ? ? ? ? ? document.onmousemove = null;

    ? ? ? ? ? ? ? ? ? ? document.onmouseup = null;

    ? ? ? ? ? ? ? ? };

    ? ? ? ? ? ? };

    ? ? ? ? };

    ? ?

    ? ?

    ? ?

    ? ?

    ? ?

    ? ?

    ? ?

    ? ?

    ? ?

    ? ?

    ? ?

    ? ? ? ?

    ? ?

    ? ?

    ? ?

    ? ?

    ? ?

    ? ? ? ?

    ? ?

    ? ?

    ? ?

    ? ?

    ? ?

    ? ? ? ?

    ? ?

    ? ?

    ? ?

    ? ?

    ? ?

    ? ? ? ?

    ? ?

    ? ?

    ? ?

    ? ?

    ? ?

    ? ?

    ? ?

    ? ?

    ? ?

    ? ?

    最后編輯于
    ?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
    • 序言:七十年代末歉提,一起剝皮案震驚了整個(gè)濱河市浙炼,隨后出現(xiàn)的幾起案子份氧,更是在濱河造成了極大的恐慌,老刑警劉巖弯屈,帶你破解...
      沈念sama閱讀 218,941評(píng)論 6 508
    • 序言:濱河連續(xù)發(fā)生了三起死亡事件蜗帜,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡资厉,警方通過(guò)查閱死者的電腦和手機(jī)厅缺,發(fā)現(xiàn)死者居然都...
      沈念sama閱讀 93,397評(píng)論 3 395
    • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)宴偿,“玉大人湘捎,你說(shuō)我怎么就攤上這事≌酰” “怎么了窥妇?”我有些...
      開封第一講書人閱讀 165,345評(píng)論 0 356
    • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)娩践。 經(jīng)常有香客問(wèn)我活翩,道長(zhǎng),這世上最難降的妖魔是什么翻伺? 我笑而不...
      開封第一講書人閱讀 58,851評(píng)論 1 295
    • 正文 為了忘掉前任材泄,我火速辦了婚禮,結(jié)果婚禮上吨岭,老公的妹妹穿的比我還像新娘拉宗。我一直安慰自己,他們只是感情好辣辫,可當(dāng)我...
      茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
    • 文/花漫 我一把揭開白布旦事。 她就那樣靜靜地躺著,像睡著了一般急灭。 火紅的嫁衣襯著肌膚如雪族檬。 梳的紋絲不亂的頭發(fā)上,一...
      開封第一講書人閱讀 51,688評(píng)論 1 305
    • 那天化戳,我揣著相機(jī)與錄音单料,去河邊找鬼。 笑死点楼,一個(gè)胖子當(dāng)著我的面吹牛扫尖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播掠廓,決...
      沈念sama閱讀 40,414評(píng)論 3 418
    • 文/蒼蘭香墨 我猛地睜開眼换怖,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了蟀瞧?” 一聲冷哼從身側(cè)響起沉颂,我...
      開封第一講書人閱讀 39,319評(píng)論 0 276
    • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤条摸,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后铸屉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钉蒲,經(jīng)...
      沈念sama閱讀 45,775評(píng)論 1 315
    • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
      茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
    • 正文 我和宋清朗相戀三年彻坛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了顷啼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
      茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
    • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡昌屉,死狀恐怖钙蒙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情间驮,我是刑警寧澤躬厌,帶...
      沈念sama閱讀 35,789評(píng)論 5 346
    • 正文 年R本政府宣布,位于F島的核電站竞帽,受9級(jí)特大地震影響扛施,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜抢呆,卻給世界環(huán)境...
      茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
    • 文/蒙蒙 一煮嫌、第九天 我趴在偏房一處隱蔽的房頂上張望笛谦。 院中可真熱鬧抱虐,春花似錦、人聲如沸饥脑。這莊子的主人今日做“春日...
      開封第一講書人閱讀 31,993評(píng)論 0 22
    • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)灶轰。三九已至谣沸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間笋颤,已是汗流浹背乳附。 一陣腳步聲響...
      開封第一講書人閱讀 33,107評(píng)論 1 271
    • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留伴澄,地道東北人赋除。 一個(gè)月前我還...
      沈念sama閱讀 48,308評(píng)論 3 372
    • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像非凌,于是被迫代替她去往敵國(guó)和親举农。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
      茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

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

    • 一敞嗡、DOM 什么是DOM颁糟?Document Object Model(文檔對(duì)象模型)航背。DOM是針對(duì)HTML和XML...
      空谷悠閱讀 973評(píng)論 0 2
    • 我們首先要明白,我們給頁(yè)面添加效果用到的js到底是什么棱貌?js其實(shí)包含三部分:dom 文檔對(duì)象模型 bom 瀏覽...
      一直以來(lái)都很好閱讀 807評(píng)論 0 0
    • 事件源對(duì)象 event.srcElement.tagName event.srcElement.type 捕獲釋放...
      孤魂草閱讀 889評(píng)論 0 0
    • 1. tab列表折疊效果 html: 能源系統(tǒng)事業(yè)部 崗位名稱: 工作地點(diǎn) 崗位名...
      lilyping閱讀 1,867評(píng)論 0 1
    • 工廠模式類似于現(xiàn)實(shí)生活中的工廠可以產(chǎn)生大量相似的商品,去做同樣的事情键畴,實(shí)現(xiàn)同樣的效果;這時(shí)候需要使用工廠模式。簡(jiǎn)單...
      舟漁行舟閱讀 7,769評(píng)論 2 17