国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

原生js練習(xí)題---第五課

winterdawn / 998人閱讀

摘要:那該如何是好原題給出思路是讓事件負(fù)責(zé)標(biāo)記按鍵就好了,而方向鍵的事件處理使用設(shè)個(gè)周期比較小的定時(shí)器持續(xù)監(jiān)聽,由于周期小,長按時(shí)就會(huì)立刻執(zhí)行相應(yīng)的事件處理,效果更加流暢。閃爍實(shí)現(xiàn)效果閃爍簡單的一個(gè)定時(shí)器應(yīng)用,用或都可以實(shí)現(xiàn)。

0x1模擬select控件

實(shí)現(xiàn)效果:
5-01模擬select控件

比較簡單的點(diǎn)擊事件處理,也就處理點(diǎn)擊選擇框展示菜單、點(diǎn)擊菜單選擇、點(diǎn)擊頁面任意角落隱藏菜單這三件事。這里注意點(diǎn)擊選擇框展示菜單時(shí)一定要阻止冒泡,要不然會(huì)冒到頂層元素直接觸發(fā)隱藏菜單的事件,導(dǎo)致菜單點(diǎn)不出來。

至于樣式方面,還是用背景圖的方式來實(shí)現(xiàn)一個(gè)擬物化的效果,這種做法雖然兼容性好,但是需要固定元素的寬高位置、使用固定的背景偏移來“湊出”一個(gè)效果。

當(dāng)然這些固定也不一定是絕對(duì)的,遇上背景圖不夠大簡單的方法就是設(shè)置repeat;遇上復(fù)雜背景還可以靠增加元素層級(jí)、逐層放一個(gè)背景片段、最后再組合起來的方式來實(shí)現(xiàn)(這里就得設(shè)置背景no-repeat了)。比如這里圓角搜索框的實(shí)現(xiàn)就是祖父一個(gè)圓角、父元素再一個(gè)圓角、最后子元素放上主體背景做出來的。然而這種事后的補(bǔ)救和折中總給人繁瑣而且不夠優(yōu)雅的感覺,多少也是和設(shè)計(jì)溝通不到位的結(jié)果吧-_-||...

0x2點(diǎn)擊頁面,顯示單擊的坐標(biāo)、0x4阻止右鍵菜單(阻止默認(rèn)事件)

實(shí)現(xiàn)效果:
5-02點(diǎn)擊頁面,顯示單擊的坐標(biāo)

熟悉一下鼠標(biāo)事件而已,除了獲取視口坐標(biāo)、頁面坐標(biāo)、屏幕坐標(biāo),這里還順便實(shí)踐了下鼠標(biāo)事件的4個(gè)按鍵屬性(其中按meta鍵時(shí)會(huì)喚出開始菜單,所以無效了)和button屬性。由于click事件和鼠標(biāo)右鍵無關(guān),無法用button屬性判斷是否點(diǎn)了右鍵,所以這里改用mouseup事件代替;同時(shí)也把簡單的第四題一并做了,阻止了點(diǎn)右鍵后冒出右鍵菜單。

0x3用戶按下鍵盤,顯示keyCode

實(shí)現(xiàn)效果:
5-03用戶按下鍵盤,顯示keyCode

再熟悉下鍵盤事件,為充分體驗(yàn)到每個(gè)按鍵的效果,防止f5刷新等,這里還阻止了默認(rèn)事件。

至于獲取輸入的內(nèi)容,要注意keyCode(針對(duì)keydown/keyup)、charCode(針對(duì)keypress)屬性只能獲取非字符、小寫字母和數(shù)字的ascii碼,而且即使你按了shift鍵也不能獲取大寫字母和其他字符。

所以要獲取輸入的是哪個(gè)字符應(yīng)該使用key(FF和IE,返回按鍵文本字符)或keyIdentifier(webkit,返回形如’U+unicode碼’的字符串),通過這個(gè)練習(xí)能體會(huì)到他們的不同。

0x5跟隨鼠標(biāo)移動(dòng)(大圖展示)

實(shí)現(xiàn)效果:
5-05跟隨鼠標(biāo)移動(dòng)(大圖展示)

繼續(xù)鼠標(biāo)事件,核心思路就是監(jiān)聽mouseovermouseoutmousemove三個(gè)事件分別實(shí)現(xiàn)大圖的展示、隱藏、移動(dòng),還是通過三個(gè)事件代理就可輕松實(shí)現(xiàn)。

具體實(shí)現(xiàn)上,主要考察通過Image對(duì)象來加載大圖,首先,這樣做就使大圖在變成在后期加載,免去了加載頁面主體時(shí)被幾個(gè)大圖阻塞的問題;第二,還能通過Image對(duì)象的complete屬性和load事件來判斷是否加載完,根據(jù)加載進(jìn)度進(jìn)行相應(yīng)的操作,以提高用戶體驗(yàn)。同時(shí)在大圖展示上,如果右側(cè)顯示區(qū)域不夠, 還要對(duì)大圖顯示位置做相應(yīng)調(diào)整,這就涉及到一點(diǎn)小計(jì)算了。

0x6自定義右鍵菜單

實(shí)現(xiàn)效果:
5-06自定義右鍵菜單

思路其實(shí)很簡單,阻止默認(rèn)的contextmenu事件換成顯示自定義菜單,在加個(gè)點(diǎn)擊事件實(shí)現(xiàn)隱藏菜單即可。但在交互細(xì)節(jié)上還有一些可優(yōu)化的點(diǎn):

首先,要出現(xiàn)自定義菜單的地方未必是整個(gè)頁面,若是只在某一區(qū)域內(nèi)出現(xiàn),那么菜單定位就要相對(duì)這個(gè)區(qū)域才行,而clientXclientY都是相對(duì)整個(gè)屏幕而言的,這時(shí)就需要我們重置下坐標(biāo)系了。

第二,和上面一題一樣,點(diǎn)右鍵后右邊和下邊的空間未必能容得下整個(gè)菜單,所以還要根據(jù)剩余空間來決定菜單出現(xiàn)的位置,防止菜單出界導(dǎo)致樣式失調(diào)。

0x7用鍵盤控制Div

實(shí)現(xiàn)效果:
5-07用鍵盤控制Div

原本以為只是個(gè)簡單的鍵盤事件練習(xí),沒想到遇到的坑還是挺多的,因?yàn)闉g覽器的鍵盤事件是不支持組合按鍵的,只能一次觸發(fā)一個(gè)按鍵上的事件。而這題明顯就要求使用組合鍵了,一個(gè)簡單的思路就是給要用到的組合按鍵分配一個(gè)對(duì)應(yīng)的布爾值,按下一個(gè)按鍵觸發(fā)keydown就標(biāo)記該按鍵為true,而松開按鍵觸發(fā)keyup時(shí)則標(biāo)記為false,這樣后續(xù)的其他按鍵事件觸發(fā)時(shí)就能獲知按鍵的組合了。

對(duì)于ctrl和其他鍵組合,可以直接使用上面提到的思路,即先標(biāo)記ctrl,按下其他按鍵時(shí)就可判斷是否同時(shí)按住ctrl,執(zhí)行相應(yīng)的動(dòng)作即可。

而在使用方向鍵時(shí),除了組合的需求,還要實(shí)現(xiàn)長按按鍵使方塊連續(xù)運(yùn)動(dòng)的效果。但長按時(shí)keydown的觸發(fā)卻是在觸發(fā)一次后,等一段時(shí)間再連續(xù)觸發(fā),如果只在keydown事件的處理函數(shù)中對(duì)方塊的運(yùn)動(dòng)做處理,就會(huì)使得方塊的運(yùn)動(dòng)效果顯得卡頓而不流暢。

那該如何是好?原題給出思路是:讓keydown事件負(fù)責(zé)標(biāo)記按鍵就好了,而方向鍵的事件處理使用setInterval設(shè)個(gè)周期比較小的定時(shí)器持續(xù)監(jiān)聽,由于周期小,長按時(shí)就會(huì)立刻執(zhí)行相應(yīng)的事件處理,效果更加流暢。

除了效果的流暢,還要注意阻止默認(rèn)事件,畢竟ctrl和方向鍵都是瀏覽器常用的功能鍵。同時(shí)和前面的題目一樣,也必須限制效果的生成范圍,不能讓小方塊跑到?jīng)]邊的地方去了。

0x8 Div閃爍

實(shí)現(xiàn)效果:
5-08 Div閃爍

簡單的一個(gè)定時(shí)器應(yīng)用,用setIntervalsetTimeout都可以實(shí)現(xiàn)。

當(dāng)然,我還是比較喜歡用setTimeout,因?yàn)?b>setInterval完全可以用setTimeout的遞歸調(diào)用來模擬,而且還有以下幾個(gè)原因:

首先,鏈?zhǔn)秸{(diào)用setTimeout可以嚴(yán)格保證執(zhí)行順序,而setInterval就不那么讓人省心了,詳見前端碎語(3)

而且setInterval一開始還要等時(shí)間間隔跑完才調(diào)用回調(diào)函數(shù),若是使用setTimeout就可以直接調(diào)用遞歸函數(shù)立即開始;

最后,setTimeout的遞歸函數(shù)要中止只需破壞遞歸條件即可,不用再使用clearTimeout,還能省去定義一個(gè)定時(shí)器變量~

--- 第五課完 ---

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/79299.html

相關(guān)文章

  • 原生js習(xí)題---第六課

    摘要:自定義多級(jí)右鍵菜單實(shí)現(xiàn)效果自定義多級(jí)右鍵菜單第五課第六題中已經(jīng)通過事件實(shí)現(xiàn)了一級(jí)右鍵菜單,所以這題只要在上面再添加事件喚出子菜單即可。 0x1完美拖拽 實(shí)現(xiàn)效果:6-01完美拖動(dòng) 這里沒有使用h5的拖動(dòng),畢竟原題也是考察借助鼠標(biāo)事件實(shí)現(xiàn)自定義的拖動(dòng),所以就借鑒了《js高級(jí)程序設(shè)計(jì)》里的自定義拖動(dòng)自己封裝了個(gè)拖動(dòng)api,當(dāng)然由于做這個(gè)系列題目使用的都是es5的語法,所以IE8往下就兼容不...

    tinyq 評(píng)論0 收藏0
  • Vue.js五課 循環(huán)語句

    摘要:循環(huán)使用指令。指令需要以形式的特殊語法,是源數(shù)據(jù)數(shù)組并且是數(shù)組元素迭代的別名。 循環(huán)使用 v-for 指令。 v-for 指令需要以 item in items 形式的特殊語法, items 是源數(shù)據(jù)數(shù)組并且 item 是數(shù)組元素迭代的別名。 v-for 可以綁定數(shù)據(jù)到數(shù)組來渲染一個(gè)列表:v-for 指令 {{ site.name }} new Vue({ el: #a...

    plus2047 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<