js最簡單的拖拽效果實現(xiàn)代碼
更新時間:2010年09月24日 12:37:34 作者:
說到拖拽功能,現(xiàn)在各大,中,小型網(wǎng)站都基本上有類似的東西,特別是對彈出層拖拽,更是常見的一塌糊涂。。。
其實對于彈出層而言,拖拽最初的目的很單純,就是為了通過拉開層,使被彈出層擋住的內(nèi)容可見,(當然,后來關于拖拽的功能不斷被優(yōu)化,使得拖拽的應用有了別的意義,最典型的如igoogle的自定義首頁,通過拖放的形式滿足用戶自定義想要的內(nèi)容模塊順序和位置)。
本文討論的重點不是iGoogle的拖放效果,那屬于進階篇,本文是拖拽的“第一階”,如題,實現(xiàn)最簡單的拖拽。
這里的“最簡單”即不考慮多個拖拽層的堆疊順序,不考慮拖拽范圍限制,不考慮類似iGoogle的“dragTo”的效果等等。。。
恩,廢話不多說了,先給大家看個實例吧:
拖我試試...
content...點此-->打開 由于我是直接在頁面上內(nèi)嵌的所有代碼,加上博客園第三方插件的原因,代碼執(zhí)行效率高,有可能運行起來不是很流暢
拖拽其實就涉及的鼠標的三個事件,onmousedown,onmouseup,onmousemove,再結合獲取鼠標的位置以及層的left和top即可實現(xiàn)類似的效果。
在編碼的時候,有兩個需要注意的地方,一個是獲取當前樣式,currentStyle只在ie下有效,故對于非ie我們可以通過getComputedStyle實現(xiàn)(當然,對于這種需要獲取的屬性不是很多的情況,您也可以直接用obj.style[key]來獲取您當前想要的屬性值)
function getStyle(o,key){return o.currentStyle? o.currentStyle[key] : document.defaultView.getComputedStyle(o,null)[key]}//'currentStyle' only for ie5.0+
另一個點就是在獲取鼠標位置時要用到event,event這個東西很奇怪,ie下是局部變量,moz內(nèi)核下是全局變量(說法不準確,只是便于理解),所以在獲取鼠標位置時候要對event做個判斷
bar.onmousedown = function(e){
e = e?e:window.event; //'event' ie下局部變量,ff下全局變量
params.isDrag = true;
params._X = e.clientX; params._Y = e.clientY;
};
恩,注意以上兩點,結合正確的思路其實就可以了,并不難,下面提供參考代碼:
function getStyle(o,key){return o.currentStyle? o.currentStyle[key] : document.defaultView.getComputedStyle(o,null)[key]}//'currentStyle' only for ie5.0+
var drag = function(bar, target){
var params = {
startLeft:0,
startTop:0,
_X:0,
_Y:0,
isDrag:false
};
if(getStyle(target,'left') != 'auto'){params.startLeft = getStyle(target,'left')}
if(getStyle(target,'top') != 'auto'){params.startTop = getStyle(target,'top')}
bar.onmousedown = function(e){
e = e?e:window.event; //'event' ie下局部變量,ff下全局變量
params.isDrag = true;
params._X = e.clientX; params._Y = e.clientY;
};
document.onmouseup = function(){
params.isDrag = false;
if(getStyle(target,'left') != 'auto'){params.startLeft = getStyle(target,'left')}
if(getStyle(target,'top') != 'auto'){params.startTop = getStyle(target,'top')}
};
document.onmousemove = function(e){
var e = e?e:window.event;
if(params.isDrag){
var curX = e.clientX, curY = e.clientY, desL = curX-params._X+parseInt(params.startLeft), desT = curY-params._Y+parseInt(params.startTop);
target.style['left'] = desL>=0?desL + 'px':0;
target.style['top'] = desT>=0?desT + 'px':0;
}
}
};
恩,至此,本文差不多可以結束了,關于類似的iGoogle的拖拽進階篇,有時間會繼續(xù)的,下面結合拖拽舉個綜合彈出層的例子,
不設任何options參數(shù)的box(默認高200px,寬300px)
無遮罩的box
這個彈出層插件是我在上文中就提到的,而且還提供了源文件下載,在此只是加上了拖動效果而已
ps:由于代碼高亮插件的原因,遮罩層上會有白色小方塊,暫沒做處理。。。
本文討論的重點不是iGoogle的拖放效果,那屬于進階篇,本文是拖拽的“第一階”,如題,實現(xiàn)最簡單的拖拽。
這里的“最簡單”即不考慮多個拖拽層的堆疊順序,不考慮拖拽范圍限制,不考慮類似iGoogle的“dragTo”的效果等等。。。
恩,廢話不多說了,先給大家看個實例吧:
拖我試試...
content...點此-->打開 由于我是直接在頁面上內(nèi)嵌的所有代碼,加上博客園第三方插件的原因,代碼執(zhí)行效率高,有可能運行起來不是很流暢
拖拽其實就涉及的鼠標的三個事件,onmousedown,onmouseup,onmousemove,再結合獲取鼠標的位置以及層的left和top即可實現(xiàn)類似的效果。
在編碼的時候,有兩個需要注意的地方,一個是獲取當前樣式,currentStyle只在ie下有效,故對于非ie我們可以通過getComputedStyle實現(xiàn)(當然,對于這種需要獲取的屬性不是很多的情況,您也可以直接用obj.style[key]來獲取您當前想要的屬性值)
復制代碼 代碼如下:
function getStyle(o,key){return o.currentStyle? o.currentStyle[key] : document.defaultView.getComputedStyle(o,null)[key]}//'currentStyle' only for ie5.0+
另一個點就是在獲取鼠標位置時要用到event,event這個東西很奇怪,ie下是局部變量,moz內(nèi)核下是全局變量(說法不準確,只是便于理解),所以在獲取鼠標位置時候要對event做個判斷
復制代碼 代碼如下:
bar.onmousedown = function(e){
e = e?e:window.event; //'event' ie下局部變量,ff下全局變量
params.isDrag = true;
params._X = e.clientX; params._Y = e.clientY;
};
恩,注意以上兩點,結合正確的思路其實就可以了,并不難,下面提供參考代碼:
復制代碼 代碼如下:
function getStyle(o,key){return o.currentStyle? o.currentStyle[key] : document.defaultView.getComputedStyle(o,null)[key]}//'currentStyle' only for ie5.0+
var drag = function(bar, target){
var params = {
startLeft:0,
startTop:0,
_X:0,
_Y:0,
isDrag:false
};
if(getStyle(target,'left') != 'auto'){params.startLeft = getStyle(target,'left')}
if(getStyle(target,'top') != 'auto'){params.startTop = getStyle(target,'top')}
bar.onmousedown = function(e){
e = e?e:window.event; //'event' ie下局部變量,ff下全局變量
params.isDrag = true;
params._X = e.clientX; params._Y = e.clientY;
};
document.onmouseup = function(){
params.isDrag = false;
if(getStyle(target,'left') != 'auto'){params.startLeft = getStyle(target,'left')}
if(getStyle(target,'top') != 'auto'){params.startTop = getStyle(target,'top')}
};
document.onmousemove = function(e){
var e = e?e:window.event;
if(params.isDrag){
var curX = e.clientX, curY = e.clientY, desL = curX-params._X+parseInt(params.startLeft), desT = curY-params._Y+parseInt(params.startTop);
target.style['left'] = desL>=0?desL + 'px':0;
target.style['top'] = desT>=0?desT + 'px':0;
}
}
};
恩,至此,本文差不多可以結束了,關于類似的iGoogle的拖拽進階篇,有時間會繼續(xù)的,下面結合拖拽舉個綜合彈出層的例子,
不設任何options參數(shù)的box(默認高200px,寬300px)
無遮罩的box
這個彈出層插件是我在上文中就提到的,而且還提供了源文件下載,在此只是加上了拖動效果而已
ps:由于代碼高亮插件的原因,遮罩層上會有白色小方塊,暫沒做處理。。。
您可能感興趣的文章:
- JQuery Dialog(JS 模態(tài)窗口,可拖拽的DIV)
- js實現(xiàn)拖拽效果
- Javascript拖拽系列文章2之offsetLeft、offsetTop、offsetWidth、offsetHeight屬性
- javascript支持firefox,ie7頁面布局拖拽效果代碼
- 關于js拖拽上傳 [一個拖拽上傳修改頭像的流程]
- js完美的div拖拽實例代碼
- javascript拖拽上傳類庫DropzoneJS使用方法
- 鼠標拖拽移動子窗體的JS實現(xiàn)
- 使用js實現(xiàn)的簡單拖拽效果
- js 表格排序(編輯+拖拽+縮放)
- Javascript拖拽系列文章1之offsetParent屬性
- js拖拽一些常見的思路方法整理
- javascript實現(xiàn)移動端上的觸屏拖拽功能
- JS實現(xiàn)的簡單拖拽功能示例
相關文章
據(jù)說是Google首頁的網(wǎng)頁模塊拖動代碼
據(jù)說是Google首頁的網(wǎng)頁模塊拖動代碼,Google很早就應用了網(wǎng)頁拖動特效,不知大家發(fā)現(xiàn)沒?本款拖動特效可以說是完全模仿了Google的拖動代碼,比較有代表性,因此也很有參考價值,奉獻給大家,僅供參考。2010-09-09仿Discuz!的論壇評分發(fā)帖彈出提示并漸漸消失的效果
仿Discuz!論壇評分發(fā)帖彈出提示并漸漸消失的效果,相信不少朋友都見到過這效果吧2010-10-10支持IE,firefxo,chrome瀏覽器下鼠標拖動和拖拽的鼠標指針特效
這篇文章主要分享一個鼠標拖動的層的實例,支持谷歌瀏覽器,firefox,ie等瀏覽器,需要的朋友可以測試下2015-02-02javascript實現(xiàn)的在當前窗口中漂浮框的代碼
javascript實現(xiàn)的在當前窗口中漂浮框的代碼,代碼中有注釋,需要學習的朋友可以參考下。2010-03-03