欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

js實現(xiàn)鍵盤操作實現(xiàn)div的移動或改變的原理及代碼

 更新時間:2014年06月23日 16:04:50   投稿:whsnow  
實現(xiàn)鍵盤操作實現(xiàn)div的移動,最關(guān)鍵的一點:獲取div對象,下面有個不錯的示例,大家可以參考下

昨天記錄了獲取鍵盤按鍵的值的事件,有了值,無非就是針對不同值做不同的操作嘛,而且之前曾經(jīng)在寫貪吃蛇時也用到過。結(jié)果一捯飭,又是好久的一段時間,所以感覺有必要記錄下的,一方面確有可取之處,另一方面也對自己的提醒,剛剛實現(xiàn)過的功能轉(zhuǎn)頭又是陌生人了,總的來說,算是溫故而知新吧。

這樣我們先來分析,要實現(xiàn)鍵盤操作實現(xiàn)div的移動大概的原理吧:

*---要實現(xiàn)div的移動,首先最關(guān)鍵的一點:獲取div對象

*---postion:absolute將div完全從文檔流中拖出啊,這個地方漏掉了,回去看了貪吃蛇才發(fā)現(xiàn)的,真暈

*---獲取鍵盤的操作

*---根據(jù)鍵盤的不同操作,給出不同響應(yīng)


這就是我想起的大概需要注意的地方,還是先來看代碼:

先是html部分

<div style="width: 50px;height: 50px;background-color: cyan;position: absolute;" id="showZone">


然后記錄下javascript的實際操作

window.onload=function(){ 
var obj=document.getElementById("showZone");//獲取到對象了吧,這最簡單 
var a=10; 
var toLeft=toRight=toTop=toBottom=false;//定義幾個boolean型變量,是為了后面方向操作用的,看是四個方向吧 

var move=setInterval(function(){//這個地方的move定義實際上毫無意義,只是為了讓這個方法更明顯一點 
if(toLeft){ 
obj.style.left=parseInt(obj.offsetLeft-a)+"px";//感覺最好還是寫上parseInt,另外,因為offsetLeft是不含px的,所以不要忘記“px” 
} 
if(toRight){ 
obj.style.left=obj.offsetLeft+a+"px";//不寫parseInt也可以,難道是因為javascript的執(zhí)行順序?執(zhí)行+,再執(zhí)行+,再執(zhí)行=?實現(xiàn)結(jié)果來看是 
} 
if(toTop){ 
obj.style.top=obj.offsetTop-a+"px"; 
} 
if(toBottom){ 
obj.style.top=obj.offsetTop+a+"px"; 
} 
},300); //這個經(jīng)典的定時器啊,循環(huán)執(zhí)行的大神器,還記得setInterval和settimeout的區(qū)別么 
document.onkeydown=function(event){ 
var event=event||window.event; 
switch(event.keyCode){ //哈哈,獲取到鍵盤操作了吧 
case 37:toLeft=true;break;//改變變量,繼續(xù)執(zhí)行最初的循環(huán),不讓你停不能停啊 
case 38:toTop=true;break; 
case 39:toRight=true;break; 
case 40:toBottom=true;break; 
} 
}; 
document.onkeyup=function(event){ 
switch(event.keyCode){ 
case 37:toLeft=false;break;//給我變回來,讓你停就別動了 
case 38:toTop=false;break; 
case 39:toRight=false;break; 
case 40:toBottom=false;break; 
} 
}; 
};

就這樣,我們完成了原理分析中的需求,同時也就可以通過上、下、左、右按鍵來實現(xiàn)div的上下左右移動了,接下來,再來記錄下敏感地方吧。

1、div需是absolute的,為這個糾結(jié)了半天實在不值得,于是查詢了下,了解了一個概念“文檔流”,

文檔流,通常說是元素從上而下,自左向右進行排列,那么這個元素就是節(jié)點元素,龐大的dom啊。還是先來說說其它解釋吧,我比較喜歡的是這樣來闡述:文檔+流,文檔顧名思義就是說網(wǎng)頁文檔,而流則是輸出方式,還有的解釋說是瀏覽器的解析方式,這個貌似更形象一點,正常的文檔流,就好像是一個平面,而一個元素你把它放在哪了,它就在哪,而浮動、固定定位和相對定位,這里分析absolute,就是重新生成了一個流,脫離了它的父層標簽,就好像之前z-index為0,而這個的z-index就上了它的上面,憑空懸浮在它上面的,可以通過left、top來肆意的挪動它。

大概意思能夠明白了,但是感覺有些地方還是沒法有效的用語言來表述,而且有些點略微有些模糊,相信隨著經(jīng)驗的累積,我能理解的更深一些。

2、keyCode這里的大寫,onkeyup和onkeydown這里的小寫,在這個地方也是測試了下才發(fā)現(xiàn)的問題,對于javascript,每個小地方都是大問題??;

3、switch里的break;這個java里面就常碰到,就不多說了

大概的問題就是以上幾點,而你還記得注釋的快捷鍵么,還記得其他快捷鍵么,這就出現(xiàn)了一個問題,上面做出響應(yīng)的我們只是針對單個按鍵,如果我們想用一些快捷鍵呢,該怎么設(shè)置呢?

先來看下代碼:

document.onkeydown=function(event){//還是跟上面差不多的代碼吧,你看出不同在哪里了么 
var event=event||window.event; 
var bctrl=event.ctrlKey;//在這里 
switch(event.keyCode){ 
case 37:toLeft=true;break; 
case 38:if(bctrl){obj.style.background="yellow";break;}toTop=true;break;//在這里, 
case 39:toRight=true;break; 
case 40:toBottom=true;break; 
} 
};


這里碰到了event對象的另一個屬性,是在keyCode之外的另一個,ctrlKey,還是大寫哦,它的主要功能是檢查ctrl按鍵的狀態(tài),其實這樣的還有兩個:

altKey和shiftKey,分別是對alt按鍵和shift按鍵狀態(tài)的檢查,這樣知道怎么設(shè)個快捷鍵了吧。

其實如果是我自己寫的話,可能這樣我就已經(jīng)很滿足了,但是在翻閱搜索的時候,總能碰到心思縝密的朋友

附上代碼,你知道是要做什么么:

function limit(){ 
var doc = [document.documentElement.clientWidth, document.documentElement.clientHeight] 
//防止左側(cè)溢出 
obj.offsetLeft <=0 && (<span style="font-family: Arial, Helvetica, sans-serif;">obj</span><span style="font-family: Arial, Helvetica, sans-serif;">.style.left = 0);</span> 
//防止頂部溢出 
obj.offsetTop <=0 && (obj.style.top = 0); 
//防止右側(cè)溢出 
doc[0] - obj.offsetLeft - obj.offsetWidth <= 0 && (obj.style.left = doc[0] - obj.offsetWidth + "px"); 
//防止底部溢出 
doc[1] - obj.offsetTop - obj.offsetHeight <= 0 && (obj.style.top = doc[1] - obj.offsetHeight + "px") 
}

這里我附上的是網(wǎng)上的代碼在實現(xiàn)防止溢出的同時,我還想贊一下這個寫法,比我寫的果斷的要短了許多許多,以后也要試著寫短點。

相關(guān)文章

  • JavaScript每天必學(xué)之基礎(chǔ)知識

    JavaScript每天必學(xué)之基礎(chǔ)知識

    JavaScript每天必學(xué)之基礎(chǔ)知識,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • img標簽中onerror用法

    img標簽中onerror用法

    可是這會引起再因網(wǎng)絡(luò)原因或其他原因使圖片不能正常加載的話 這樣就是再次調(diào)用onerror,基于微軟的一套核心的瀏覽器就會認為這是死循環(huán)
    2009-08-08
  • JS 拼湊字符串的簡單實例

    JS 拼湊字符串的簡單實例

    下面小編就為大家?guī)硪黄狫S 拼湊字符串的簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • 原生js實現(xiàn)tab選項卡切換

    原生js實現(xiàn)tab選項卡切換

    這篇文章主要為大家詳細介紹了原生js實現(xiàn)tab選項卡,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • layui-select動態(tài)選中值的例子

    layui-select動態(tài)選中值的例子

    今天小編就為大家分享一篇layui-select動態(tài)選中值的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • 微信小程序?qū)崿F(xiàn)本地分頁加載

    微信小程序?qū)崿F(xiàn)本地分頁加載

    這篇文章主要為大家詳細介紹了微信小程序?qū)崿F(xiàn)本地分頁加載,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • JAVASCRIPT IE 與 FF中兼容問題小結(jié)

    JAVASCRIPT IE 與 FF中兼容問題小結(jié)

    在不同瀏覽器中對于一些屬性的支持也不一樣,下面是對ie和firefox的一些小結(jié)。
    2009-02-02
  • layui自定義驗證,用ajax查詢后臺是否有重復(fù)數(shù)據(jù),form.verify的例子

    layui自定義驗證,用ajax查詢后臺是否有重復(fù)數(shù)據(jù),form.verify的例子

    今天小編就為大家分享一篇layui自定義驗證,用ajax查詢后臺是否有重復(fù)數(shù)據(jù),form.verify的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • 常用javascript表單驗證匯總

    常用javascript表單驗證匯總

    這篇文章主要介紹了一些常用javascript表單驗證,文章最后還附帶了一個實踐案例,以驗證數(shù)字為例進行講解,感興趣的小伙伴們可以參考一下
    2015-11-11
  • 利用JavaScript實現(xiàn)一個日期范圍選擇器

    利用JavaScript實現(xiàn)一個日期范圍選擇器

    日期范圍選擇器是一個常見的Web應(yīng)用功能,它允許用戶選擇一個日期范圍,本文我們將使用JavaScript來實現(xiàn)這個功能,感興趣的小伙伴可以了解下
    2024-01-01

最新評論