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