最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Javascript 拖拽雛形(逐行分析代碼,讓你輕松了拖拽的原理)

 更新時(shí)間:2015年01月23日 16:46:33   投稿:mdxy-dxy  
這篇文章主要介紹了Javascript 拖拽雛形(逐行分析代碼,讓你輕松了拖拽的原理),需要的朋友可以參考下

拖拽的原理: 其實(shí)就是鼠標(biāo)與左上角的距離保持不變。我們來看下圖, 這紅點(diǎn)就是鼠標(biāo)。

拖拽拖拽實(shí)際上來說就是通過鼠標(biāo)的位置來計(jì)算物體的位置,就是這么簡單,就是這么任性。 那這個(gè)距離怎么求呢??

鼠標(biāo)的位置-物體位置的差值就是那個(gè)距離 是吧。那這個(gè)斜線就是橫線和豎線組成的。

我們距離看下程序怎么做。

<div id="div1">

    </div>

實(shí)際上他改的就是某個(gè)div 的left top ,那他就動(dòng)起來了。 那樣式中肯定要有絕對(duì)定位是吧。

<style type="text/css">
      #div1 {
        width: 200px;
        height: 200px;
        background: red;
        position: absolute;
      }
    </style>

這里有幾個(gè)步驟,1. 鼠標(biāo)按下 2. 鼠標(biāo)抬起來 3. 鼠標(biāo)移動(dòng)

<script type="text/javascript">
   window.onload = function() {
    var oDiv = document.getElementById("div1");
    var disX = 0;
    var disY = 0;
    oDiv.onmousedown = function(ev) {
     var oEvent = ev || event; // 瀏覽器兼容
     disX = oEvent.clientX - oDiv.offsetLeft; // 橫向的位置就是鼠標(biāo)的位置-div的位置
     disY = oEvent.clientY - oDiv.offsetTop;
    };

    oDiv.onmousemove = function(ev) {
      var oEvent = ev || event;
      oDiv.style.left = oEvent.clientX - disX+'px'; // 當(dāng)前鼠標(biāo)的位置-disX
      oDiv.style.top = oEvent.clientY - disY+'px';
     };
   };
  </script>

看圖說話:

var oDivLeft = oEvent.clientX - disX; 圖表示 很清楚吧

mouseup 我們先不加看下現(xiàn)在是什么效果。。


你會(huì)發(fā)現(xiàn)一個(gè)很有意思的現(xiàn)象,我鼠標(biāo)沒有按也會(huì)跟著我走, 這是為什么呢???

我們來看看 mousemove: Javascript中沒有人規(guī)定一定是要鼠標(biāo)按下才出發(fā)是吧,不管你鼠標(biāo)按不按下去,這個(gè)mousemove一直在發(fā)生,所以問題就來自于這里。當(dāng)鼠標(biāo)還沒有按下去之前,這個(gè)時(shí)候鼠標(biāo)在上面移動(dòng)應(yīng)該是沒有反應(yīng)的,是要按下去才有反應(yīng)。

所以呢,這個(gè)mousemove不應(yīng)該一上來就添加,而是等到鼠標(biāo)按下去之后再添加mousemove,來看看修改后的代碼。

順便加上mouseup,這時(shí)他的作用就體現(xiàn)出來了 。作用就是oDiv.onmousemove = null; 去掉move事件,

否則當(dāng)你鼠標(biāo)抬起來的時(shí)候 ,物體還是會(huì)跟著你走的。 oDiv.onmouseup = null; 不留垃圾,鼠標(biāo)抬起本來也就沒有用了.

來看看修改后的代碼:

<script type="text/javascript">
   window.onload = function() {
    var oDiv = document.getElementById("div1");
    var disX = 0;
    var disY = 0;
    oDiv.onmousedown = function(ev) {
     var oEvent = ev || event; // 瀏覽器兼容
     disX = oEvent.clientX - oDiv.offsetLeft; // 橫向的位置就是鼠標(biāo)的位置-div的位置
     disY = oEvent.clientY - oDiv.offsetTop;

     oDiv.onmousemove = function(ev) {
      var oEvent = ev || event;
      oDiv.style.left = oEvent.clientX - disX+'px'; // 當(dāng)前鼠標(biāo)的位置-disX
      oDiv.style.top = oEvent.clientY - disY+'px';
     };
     oDiv.onmouseup = function() {
      oDiv.onmousemove = null;
      oDiv.onmouseup = null; // 不留垃圾,鼠標(biāo)抬起本來也就沒有用了
     };

    };

   };
  </script>

現(xiàn)在我們就做了一個(gè)簡單的拖拽出來,當(dāng)然這還有一些小問題有待我們?nèi)ソ鉀Q。

但是無論如何,我們已經(jīng)具備一個(gè)拖拽的雛形。 下期我們會(huì)一一解決一些bug。

相關(guān)文章

  • ie8本地圖片上傳預(yù)覽示例代碼

    ie8本地圖片上傳預(yù)覽示例代碼

    ie8本地圖片上傳預(yù)覽出現(xiàn)問題是因?yàn)橄拗茷g覽器造訪本地文件,所以用到濾鏡和div,下面有個(gè)不錯(cuò)的示例,希望對(duì)大家有所幫助
    2014-01-01
  • JS 中forEach,for in、for of用法實(shí)例總結(jié)

    JS 中forEach,for in、for of用法實(shí)例總結(jié)

    這篇文章主要介紹了JS 中forEach,for in、for of用法,結(jié)合實(shí)例形式總結(jié)分析了JS 中forEach,for in、for of的基本功能、使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2023-05-05
  • JavaScript新增的兩個(gè)原始數(shù)據(jù)類型詳解(Record和Tuple)

    JavaScript新增的兩個(gè)原始數(shù)據(jù)類型詳解(Record和Tuple)

    js中原始數(shù)據(jù)類型有Number、String、Boolean、Null、Undefined、Symbol (ES6引入的數(shù)據(jù)類型),引用的數(shù)據(jù)類型有Object,Array,Function,下面這篇文章主要給大家介紹了關(guān)于JavaScript新增兩個(gè)原始數(shù)據(jù)類型(Record和Tuple)的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • js實(shí)現(xiàn)瀑布流效果(自動(dòng)生成新的內(nèi)容)

    js實(shí)現(xiàn)瀑布流效果(自動(dòng)生成新的內(nèi)容)

    本文主要介紹了js實(shí)現(xiàn)瀑布流效果:當(dāng)滾動(dòng)條接近底部會(huì)自動(dòng)生成新的內(nèi)容。具有很好的參考價(jià)值。下面跟著小編一起來看下吧
    2017-03-03
  • js 未結(jié)束的字符串常量錯(cuò)誤解決方法

    js 未結(jié)束的字符串常量錯(cuò)誤解決方法

    在編碼js過程中,經(jīng)常遇到未結(jié)束的字符串常量這樣提示的錯(cuò)誤,做下總結(jié),以方便以后查閱.
    2010-06-06
  • js菜單代碼js菜單特效代碼

    js菜單代碼js菜單特效代碼

    不用div+css實(shí)現(xiàn)的js菜單特效代碼用js+table實(shí)現(xiàn) 默認(rèn)選中一個(gè),點(diǎn)擊后 選中的項(xiàng)目“變白”。不用css+div 高手給做一下 多謝了 演示站:www.allss.com.cn 演示站使用css+div的 改成js+table的
    2008-01-01
  • js前端處理跨域的九種方式

    js前端處理跨域的九種方式

    本文主要介紹了js前端處理跨域的九種方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • JavaScript鏈?zhǔn)秸{(diào)用原理與實(shí)現(xiàn)方法詳解

    JavaScript鏈?zhǔn)秸{(diào)用原理與實(shí)現(xiàn)方法詳解

    這篇文章主要介紹了JavaScript鏈?zhǔn)秸{(diào)用,結(jié)合實(shí)例形式詳細(xì)分析了JavaScript鏈?zhǔn)秸{(diào)用基本原理、實(shí)現(xiàn)方法與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2020-05-05
  • 基于es6三點(diǎn)運(yùn)算符的使用方法(實(shí)例講解)

    基于es6三點(diǎn)運(yùn)算符的使用方法(實(shí)例講解)

    下面小編就為大家?guī)硪黄谌c(diǎn)運(yùn)算符的使用方法(實(shí)例講解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • javascript中Date對(duì)象的getDay方法使用指南

    javascript中Date對(duì)象的getDay方法使用指南

    這篇文章主要介紹了javascript中Date對(duì)象的getDay方法使用以及各種優(yōu)化方案,非常不錯(cuò)的文章,這里推薦給大家。
    2014-12-12

最新評(píng)論

丰原市| 德州市| 邹平县| 迭部县| 泊头市| 大新县| 绥滨县| 鄂州市| 伊金霍洛旗| 弥渡县| 安多县| 甘泉县| 年辖:市辖区| 湘潭市| 常州市| 和硕县| 临泉县| 且末县| 镇雄县| 徐汇区| 英吉沙县| 奈曼旗| 兰坪| 娱乐| 明溪县| 娄底市| 孝昌县| 浮山县| 曲水县| 双峰县| 离岛区| 临桂县| 信阳市| 佳木斯市| 宽城| 德令哈市| 类乌齐县| 昌图县| 璧山县| 韩城市| 滨海县|