中文字幕二区_国产精品免费在线观看_黄色网站观看_人人草人人澡_日本真实娇小xxxx

您的位置: 首頁 > 技術(shù)文檔 > 網(wǎng)頁制作 > 仿Apple滑動條(拖動)產(chǎn)品展示效果
JavaScript Tween算法及緩動效果 回到列表 border-radius與圓角
 仿Apple滑動條(拖動)產(chǎn)品展示效果

作者:cloudgamer 時間: 2009-01-09 文檔類型:原創(chuàng) 來自:藍(lán)色理想

第 1 頁 仿Apple滑動條(拖動)產(chǎn)品展示效果 [1]
第 2 頁 仿Apple滑動條(拖動)產(chǎn)品展示效果 [2]
第 3 頁 仿Apple滑動條(拖動)產(chǎn)品展示效果 [3]
第 4 頁 仿Apple滑動條(拖動)產(chǎn)品展示效果 [4]
第 5 頁 仿Apple滑動條(拖動)產(chǎn)品展示效果 [5]

【鼠標(biāo)滾輪控制】

鼠標(biāo)滾輪控制,就是通過鼠標(biāo)滾輪滾動來控制滑塊的滑動。
首先ie綁定滾輪事件用的是mousewheel,ff用的是DOMMouseScroll,所以在WheelBind綁定鼠標(biāo)滾輪程序中是這樣設(shè)置的:

addEventHandler(o, isIE ? "mousewheel" : "DOMMouseScroll", BindAsEventListener(this, this.WheelCtrl));

接著看WheelCtrl鼠標(biāo)滾輪控制程序,通過event的detail屬性可以獲取鼠標(biāo)滾動的距離(值大小)和方向(正負(fù))。
利用它來設(shè)置要滑動的位置:

var i = this.WheelSpeed * e.detail;
this.SetPos(this.Bar.offsetLeft + i, this.Bar.offsetTop + i);

但ie沒有detail,對應(yīng)的有wheelDelta,wheelDelta的數(shù)值剛好是detail的40倍,而且方向相反(正負(fù)相反),所以Event程序中是這樣給window.event添加detail的:

oEvent.detail = oEvent.wheelDelta / (-40);

為了防止觸發(fā)其他滾動條,這里用了preventDefault取消默認(rèn)動作。
注意不是用取消冒泡(貌似滾屏是事件的默認(rèn)動作)。

【方向鍵控制】

方向鍵控制,就是通過鍵盤的左右(上下)方向鍵來控制滑塊的滑動。
首先用KeyBind方向鍵綁定程序把KeyCtrl方向鍵控制程序綁定到對象的keydown事件中:

addEventHandler(o, "keydown", BindAsEventListener(this, this.KeyCtrl));

在KeyCtrl中,通過event的keyCode屬性獲取鍵盤的按鍵(左37、上38、右39、下40)并進(jìn)行相應(yīng)的操作:

switch (e.keyCode) {
    case 37 ://左
        iLeft -= iWidth; break;
    case 38 ://上
        iTop -= iHeight; break;
    case 39 ://右
        iLeft += iWidth; break;
    case 40 ://下
        iTop += iHeight; break;
    default :
        return;//不是方向按鍵返回
}

同樣為了防止觸發(fā)其他滾動條,也用了preventDefault取消默認(rèn)動作。

【focus和tabIndex】

在KeyBind程序中,除了綁定對象的keydown事件,還不夠的,可以在ff測試下面的代碼:

<div style="width:100px; height:100px; background-color:#CCC;" onkeydown="alert(1)"></div>

無論怎樣都觸發(fā)不了onkeydown事件(ie可以觸發(fā)),那就奇怪了,按照一般的思路應(yīng)該是可以的啊。
這個可以從w3c關(guān)于KeyboardEvent的部分中找到原因:
Keyboard events are commonly directed at the element that has the focus.
大概就是說鍵盤按鍵事件一般指向能獲取焦點的元素,就是不能獲取焦點的元素就不能觸發(fā)鍵盤按鍵事件了。

難道div就不能獲取焦點?用下面的代碼測試(ff):

<div id="test" style="width:100px; height:100px; background-color:#CCC;" onfocus="alert(1)"></div>
<script>document.getElementById("test").focus();</script>

還真的不行,那問題就在于怎么使div能獲取焦點了(當(dāng)然這個是轉(zhuǎn)了不少彎才想出來的)。

最后發(fā)現(xiàn)給元素設(shè)置tabIndex就能讓元素能獲取焦點了,如果不需要詳細(xì)了解的話下面可以略過。
首先看看w3c關(guān)于onfocus的部分:
The onfocus event occurs when an element receives focus either by the pointing device or by tabbing navigation.
This attribute may be used with the following elements: A, AREA, LABEL, INPUT, SELECT, TEXTAREA, and BUTTON.
當(dāng)元素通過指定(點擊)或tab導(dǎo)航(Tabbing navigation)獲得焦點,onfocus事件就會觸發(fā)。
該屬性會使用在以下元素(就是說默認(rèn)可以獲取焦點的元素):A, AREA, LABEL, INPUT, SELECT, TEXTAREA, and BUTTON.
測試下面的代碼:

<a href="#" onfocus="alert(1)" onkeydown="alert(2)">focus</a>

果然兩個事件都可以執(zhí)行。

接著看Tabbing navigation的部分:
Those elements that do not support the tabindex attribute or support it and assign it a value of "0" are navigated next. These elements are navigated in the order they appear in the character stream.
這里看得不太明白,關(guān)鍵的意思是給元素設(shè)置tabindex為0就可以被導(dǎo)航到了(能獲取焦點了)。
測試下面的代碼(ff):

<div tabindex="0" style="width:100px; height:100px; background-color:#CCC;" onfocus="alert(1)" onkeydown="alert(2)"></div>

果然兩個事件都能觸發(fā)了。

不過w3c說得很模糊,msdn上倒是很清楚:
An element can have focus if the tabIndex property is set to any valid negative or positive integer.
Elements that receive focus can fire the onblur and onfocus events as of Internet Explorer 4.0, and the onkeydown, onkeypress, and onkeyup events as of Internet Explorer 5.
只要元素的tabIndex屬性設(shè)置成任何有效的整數(shù)那么該元素就能取得焦點。元素在取得焦點后就能觸發(fā)onblur,onfocus,onkeydown, onkeypress和onkeyup事件。

不同tabIndex值在tab order(Tabbing navigation)中的情況:
Objects with a positive tabIndex are selected in increasing iIndex order and in source order to resolve duplicates.
Objects with an tabIndex of zero are selected in source order.
Objects with a negative tabIndex are omitted from the tabbing order.
tabIndex值是正數(shù)的對象根據(jù)遞增的值順序和代碼中的位置順序來被選擇
tabIndex值是0的對象根據(jù)在代碼中的位置順序被選擇
tabIndex值是負(fù)數(shù)的對象會被忽略

這個不知道是否符合標(biāo)準(zhǔn),但貌似ff跟ie是一樣的(不同的地方后面會說)。
那么設(shè)置一個負(fù)的tabIndex值應(yīng)該是最理想的了。

ps:如果對ff的tabindex有興趣的話,推薦看看Test cases for tabindex bugs in Firefox,里面有更詳細(xì)更專業(yè)的分析。

那ie通過一開始的測試,是不是就說明不需要了呢?我們換一個元素測試:

<ul style="width:100px; height:100px; background-color:#CCC;" onfocus="alert(1)" onkeydown="alert(2)"></ul>

換成ul就又不能觸發(fā)事件了,怎么搞的。

再看看msdn,里面有一段:
The following elements can have focus by default but are not tab stops. .略. applet, div, frameSet, span, table, td.
下面的元素默認(rèn)能獲取焦點但不能tab導(dǎo)航:applet, div, frameSet, span, table, td.
看來ie真是“為程序員著想”,但其他元素總不能漏了啊,還是全部都設(shè)置tabIndex好了。

終于回到程序上來,首先設(shè)置tabIndex:

o.tabIndex = -1;

ff元素獲得焦點后會出現(xiàn)一個虛線框,去掉會美觀一點:

isIE || (o.style.outline = "none");

ps:如果tabIndex設(shè)為0或以上的話ie也會出現(xiàn)虛線框。

綁定了keydown之后,點擊一下容器(獲取焦點)后就能用方向鍵控制方向了,但如果(沒有獲得焦點時)點擊滑塊,還是觸發(fā)不了事件。
因為滑塊在拖動效果中ie的鼠標(biāo)捕獲和ff的取消默認(rèn)動作導(dǎo)致容器不能獲得焦點,那手動設(shè)置可以嗎?
是可以的,ff中就是直接在滑塊的mousedown事件中執(zhí)行容器的focus方法獲得焦點。
ie本來也是可以的,但ie中當(dāng)對象執(zhí)行focus方法時,如果該對象有部分在滾動條外就會自動滾動到適當(dāng)?shù)奈恢茫ㄟ好點擊不會這樣)。
為了降低影響,程序中把滑塊也綁定了鍵盤控制,這樣點擊滑塊時只要執(zhí)行滑塊的focus方法獲得焦點就可以了:

var oFocus = isIE ? (this.KeyBind(this.Bar), this.Bar) : this.Container;
addEventHandler(this.Bar, "mousedown", function(){ oFocus.focus(); });

ps:由于focus并不會冒泡(w3c標(biāo)準(zhǔn)),所以不用擔(dān)心滑塊的focus導(dǎo)致容器獲得焦點。
ps2:w3c的文檔還真是難讀,還是msdn的易懂。

出處:藍(lán)色理想
責(zé)任編輯:bluehearts

上一頁 仿Apple滑動條(拖動)產(chǎn)品展示效果 [3] 下一頁 仿Apple滑動條(拖動)產(chǎn)品展示效果 [5]

◎進(jìn)入論壇網(wǎng)頁制作、WEB標(biāo)準(zhǔn)化版塊參加討論,我還想發(fā)表評論。

相關(guān)文章 更多相關(guān)鏈接
JavaScript Tween算法及緩動效果
PS和專業(yè)濾鏡讓普通相片變HDR效果
如何走出JavaScript初學(xué)困境
HTML與javascript中常用編碼淺析
Photoshop制作機(jī)器油膩效果
作者文章
JavaScript Tween算法及緩動效果
JavaScript 圖片切割效果
JavaScript 拖放效果分析
關(guān)鍵字搜索 常規(guī)搜索 推薦文檔
熱門搜索:CSS Fireworks 設(shè)計比賽 網(wǎng)頁制作 web標(biāo)準(zhǔn) 用戶體驗 UE photoshop Dreamweaver Studio8 Flash 手繪 CG
站點最新 站點最新列表
周大!熬•自然”設(shè)計大賽開啟
國際體驗設(shè)計大會7月將在京舉行
中國國防科技信息中心標(biāo)志征集
云計算如何讓安全問題可控
云計算是多數(shù)企業(yè)唯一擁抱互聯(lián)網(wǎng)的機(jī)會
阿里行云
云手機(jī)年終巨獻(xiàn),送禮標(biāo)配299起
阿里巴巴CTO王堅的"云和互聯(lián)網(wǎng)觀"
1499元買真八核 云OS雙蛋大促
首屆COCO桌面手機(jī)主題設(shè)計大賽
欄目最新 欄目最新列表
淺談JavaScript編程語言的編碼規(guī)范
如何在illustrator中繪制臺歷
Ps簡單繪制一個可愛的鉛筆圖標(biāo)
數(shù)據(jù)同步算法研究
用ps作簡單的作品展示頁面
CSS定位機(jī)制之一:普通流
25個最佳最閃亮的Eclipse開發(fā)項目
Illustrator中制作針線縫制文字效果
Photoshop制作印刷凹凸字體
VS2010中創(chuàng)建自定義SQL Rule
>> 分頁 首頁 前頁 后頁 尾頁 頁次:4/51個記錄/頁 轉(zhuǎn)到 頁 共5個記錄

藍(lán)色理想版權(quán)申明:除部分特別聲明不要轉(zhuǎn)載,或者授權(quán)我站獨家播發(fā)的文章外,大家可以自由轉(zhuǎn)載我站點的原創(chuàng)文章,但原作者和來自我站的鏈接必須保留(非我站原創(chuàng)的,按照原來自一節(jié),自行鏈接)。文章版權(quán)歸我站和作者共有。

轉(zhuǎn)載要求:轉(zhuǎn)載之圖片、文件,鏈接請不要盜鏈到本站,且不準(zhǔn)打上各自站點的水印,亦不能抹去我站點水印。

特別注意:本站所提供的攝影照片,插畫,設(shè)計作品,如需使用,請與原作者聯(lián)系,版權(quán)歸原作者所有,文章若有侵犯作者版權(quán),請與我們聯(lián)系,我們將立即刪除修改。

您的評論
用戶名:  口令:
說明:輸入正確的用戶名和密碼才能參與評論。如果您不是本站會員,你可以注冊 為本站會員。
注意:文章中的鏈接、內(nèi)容等需要修改的錯誤,請用報告錯誤,以利文檔及時修改。
不評分 1 2 3 4 5
注意:請不要在評論中含與內(nèi)容無關(guān)的廣告鏈接,違者封ID
請您注意:
·不良評論請用報告管理員,以利管理員及時刪除。
·尊重網(wǎng)上道德,遵守中華人民共和國的各項有關(guān)法律法規(guī)
·承擔(dān)一切因您的行為而直接或間接導(dǎo)致的民事或刑事法律責(zé)任
·本站評論管理人員有權(quán)保留或刪除其管轄評論中的任意內(nèi)容
·您在本站發(fā)表的作品,本站有權(quán)在網(wǎng)站內(nèi)轉(zhuǎn)載或引用
·參與本評論即表明您已經(jīng)閱讀并接受上述條款
推薦文檔 | 打印文檔 | 評論文檔 | 報告錯誤  
專業(yè)書推薦 更多內(nèi)容
網(wǎng)站可用性測試及優(yōu)化指南
《寫給大家看的色彩書1》
《跟我去香港》
眾妙之門—網(wǎng)站UI 設(shè)計之道
《Flex 4.0 RIA開發(fā)寶典》
《贏在設(shè)計》
犀利開發(fā)—jQuery內(nèi)核詳解與實踐
作品集 更多內(nèi)容

雜⑦雜⑧ Gold NORMANA V2