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

資訊專欄INFORMATION COLUMN

使用mousedown、mousemove、mouseup實(shí)現(xiàn)拖拽效果

周國(guó)輝 / 1852人閱讀

摘要:如何實(shí)現(xiàn)一個(gè)元素的拖拽效果,使用原生的實(shí)現(xiàn),習(xí)慣了的同學(xué)們,你們自己寫了嗎久使用框架,不寫的東西,感覺(jué)自己完全不會(huì)了。話不多說(shuō),直接上。本例子以簡(jiǎn)單的為例子。我是一個(gè)可以退拽的

如何實(shí)現(xiàn)一個(gè)元素的拖拽效果,使用原生的js實(shí)現(xiàn),習(xí)慣了jquery的同學(xué)們,你們自己寫了嗎?N久使用mvvm框架,不寫jquery的東西,感覺(jué)自己完全不會(huì)了。

話不多說(shuō),直接上code。本例子以簡(jiǎn)單的div為例子。

html
我是一個(gè)可以退拽的div
css
div {
  position: fixed;
  left: 0;
  top: 0;
  width: 100px;
  height: 100px;
  background: #999;
  padding: 10px;
  cursor: pointer;
}
javascript
window.onload = funtion() {
  const div = document.getElementById("div");
  let initPosition = {};


  div.addEventListener("mousedown", onMousedown);
  
  function onMousedown(event) {
    
    const { pageX, pageY } = event;
    initPosition = getPosition();

    document.addEventListener("mousemove", omMousemove);
    document.addEventListener("mouseup", onMouseUp);

  }

  function omMousemove(event) {
    const { pageX, pageY } = event;
    const { left, top} = calcPosition(pageX, pageY);

    div.style.cssText = `left:${left}px;top:${top}px;`;

  }

  function onMouseUp(event) {
    document.removeEventListener("mousemove", onMouseMove);
  }


  function calcPosition(pageX, pageY) {

    const { left, top, scrollLeft, maxCriticalX, maxCriticalY } = initPosition;

    let x = pageX - left;
    let y = pageY - top;

    if (x <= scrollLeft) {
      x = scrollLeft;
    }

    if (x >= maxCriticalX) {
      x = maxCriticalX;
    }

    if (y >= maxCriticalY) {
      y = maxCriticalY;
    }

    if ( y<=0 || maxCriticalY < 0) {
      y = 0;
    }

    return {
      left: x,
      top: y
    };
  }



  function getPosition() {
    const { left, top, width, height } = div.getBoundingClientRect();
    const { scrollLeft, scrollTop } = document.body;

    const maxCriticalX = scrollLeft + innerWidth - width;
    const maxCriticalY = scrollTop + innerHeight - height;

    return {
        left,
        top,
        scrollLeft,
        maxCriticalX,
        maxCriticalY
    };
  }
};

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

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

相關(guān)文章

  • RxJS 實(shí)戰(zhàn)篇(一)拖拽

    摘要:相比之下,響應(yīng)式編程在解決此類問(wèn)題上有著得天獨(dú)厚的優(yōu)勢(shì)。當(dāng)然要加深對(duì)的理解還是得多多實(shí)戰(zhàn)。要實(shí)現(xiàn)一個(gè)簡(jiǎn)單的拖拽,需要對(duì)等多個(gè)事件進(jìn)行觀察,并相應(yīng)地改變小方塊的位置。具體實(shí)現(xiàn)可以參見(jiàn)添加初始延遲需求在拖拽的實(shí)際應(yīng)用中,有時(shí)會(huì)希望有個(gè)初始延遲。 本文最初發(fā)布于我的個(gè)人博客:咀嚼之味 面對(duì)交互性很強(qiáng)、數(shù)據(jù)變化復(fù)雜的場(chǎng)景,傳統(tǒng)的前端開(kāi)發(fā)方式往往存在一些共有的問(wèn)題:1). UI 狀態(tài)與數(shù)據(jù)難以追...

    frontoldman 評(píng)論0 收藏0
  • js面向?qū)ο缶毩?xí)-拖拽效果

    摘要:因?yàn)閷?duì)象只出現(xiàn)在事件中,所以我們要把對(duì)象保存變量,然后通過(guò)參數(shù)傳遞后面的函數(shù)和函數(shù)就沒(méi)什么要注意的地方了要注意的問(wèn)題關(guān)于指針的問(wèn)題,面向?qū)ο罄锩嫣貏e重要拓展閱讀關(guān)于對(duì)象的問(wèn)題,對(duì)象只出現(xiàn)在事件里面,所以寫方法的時(shí)候要注意一下 首先來(lái)了解一下,面向?qū)ο缶毩?xí)的基本規(guī)則和問(wèn)題: 先寫出普通的寫法,然后改成面向?qū)ο髮懛?xiàng) 普通方法變形 ·盡量不要出現(xiàn)函數(shù)嵌套函數(shù) ·可以有全局變量...

    haoguo 評(píng)論0 收藏0
  • 簡(jiǎn)單的支持網(wǎng)頁(yè)畫框拖拽縮放功能的js插件

    摘要:我就不提除此以外還需要實(shí)現(xiàn)的一些業(yè)務(wù)上的細(xì)節(jié)交互了,本篇文章只講講我實(shí)現(xiàn)的拖拽功能的原理。這里其實(shí)大家就可以看出來(lái)了,得益于面向?qū)ο蟮臋C(jī)制,我們可以很簡(jiǎn)單的實(shí)現(xiàn)一些畫框拖拽功能。 引言 前不久,老大給我分配一個(gè)比較吊炸天的任務(wù)。要我實(shí)現(xiàn):在一張圖片上,可以用鼠標(biāo)畫框。除此以外,畫出來(lái)的框,可以實(shí)現(xiàn)resize,也就是說(shuō)可以通過(guò)鼠標(biāo)操作縮放,也可以進(jìn)行拖拽。我就不提除此以外還需要實(shí)現(xiàn)的一...

    oneasp 評(píng)論0 收藏0
  • 簡(jiǎn)單的支持網(wǎng)頁(yè)畫框拖拽縮放功能的js插件

    摘要:我就不提除此以外還需要實(shí)現(xiàn)的一些業(yè)務(wù)上的細(xì)節(jié)交互了,本篇文章只講講我實(shí)現(xiàn)的拖拽功能的原理。這里其實(shí)大家就可以看出來(lái)了,得益于面向?qū)ο蟮臋C(jī)制,我們可以很簡(jiǎn)單的實(shí)現(xiàn)一些畫框拖拽功能。 引言 前不久,老大給我分配一個(gè)比較吊炸天的任務(wù)。要我實(shí)現(xiàn):在一張圖片上,可以用鼠標(biāo)畫框。除此以外,畫出來(lái)的框,可以實(shí)現(xiàn)resize,也就是說(shuō)可以通過(guò)鼠標(biāo)操作縮放,也可以進(jìn)行拖拽。我就不提除此以外還需要實(shí)現(xiàn)的一...

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

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

0條評(píng)論

周國(guó)輝

|高級(jí)講師

TA的文章

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