国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

原生js實現(xiàn)拖拽效果

這篇具有很好參考價值的文章主要介紹了原生js實現(xiàn)拖拽效果。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

原生js實現(xiàn)拖拽效果,javascript,開發(fā)語言,ecmascript文章來源地址http://www.zghlxwxcb.cn/news/detail-795477.html

<!DOCTYPE html>  
<html>  
<head>  
    <style>  
        #mydiv {  
            width: 200px;  
            height: 200px;  
            background-color: red;  
            position: absolute;  
            cursor: move;  
        }  
    </style>  |
</head>  
<body>  
    <div id="mydiv">拖拽我</div>  
    <script>  
        var mydiv = document.getElementById('mydiv');  
        var x = 0, y = 0;  
        var limitX = window.innerWidth - 200; // 設(shè)置元素的最大寬度為屏幕寬度減去元素的寬度  
        var limitY = window.innerHeight - 200; // 設(shè)置元素的最大高度為屏幕高度減去元素的高度  
  
        mydiv.onmousedown = function(e) {  
            x = e.clientX - mydiv.getBoundingClientRect().left;  
            y = e.clientY - mydiv.getBoundingClientRect().top;  
            document.onmousemove = function(e) {  
                var newX = e.clientX - x;  
                var newY = e.clientY - y;  
                if (newX < 0) newX = 0; // 防止元素向左拖出屏幕外  
                if (newY < 0) newY = 0; // 防止元素向上拖出屏幕外  
                if (newX > limitX) newX = limitX; // 防止元素向右拖出屏幕外  
                if (newY > limitY) newY = limitY; // 防止元素向下拖出屏幕外  
                mydiv.style.left = newX + 'px';  
                mydiv.style.top = newY + 'px';  
            };  
            document.onmouseup = function() {  
                document.onmousemove = null; // 當(dāng)鼠標(biāo)松開時,移除鼠標(biāo)移動事件  
            };  
        };  
    </script>  
</body>  
</html>
<template>
  <div class="drag-box">
    <div id="dragContent">
      <div class="drag-home">
        <div class="drag-title" v-show="titleVisible"><br><br></div>
        <div class="drag-switch">
          <div class="message">
            <div class="name">液壓支架</div>
            <div class="info">當(dāng)前操作:前立柱升</div>
            <div class="info">當(dāng)前操作:前立柱升</div>
          </div>
          <div class="drag-button">
            <div class="menu">
              <el-button type="primary" round>采煤機(jī)</el-button>
              <el-button type="success" round>液壓知己</el-button>
              <el-button type="info" round>總控開關(guān)</el-button>
            </div>
            <div class="stats">
              <el-button type="success" round v-for="(item, index) in 9" :key="index" style="width: 8rem;">按鈕{{ item }}</el-button>
              <i v-for="item in 9" :key="item"></i>
            </div>
            <div class="submit">
              <el-button type="primary" round>啟動</el-button>
              <el-button type="success" round>停止</el-button>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
import { reactive, toRefs, onBeforeMount, onMounted, getCurrentInstance } from 'vue'

export default {
  components: {},
  setup() {
    const state = reactive({
      rightDistance: '',
      leftWidth: '',
      maxWidth: '',
      titleVisible: false
    })

    onBeforeMount(() => {

    })

    onMounted(() => {
      var dragContent = document.getElementById('dragContent');
      var x = 0, y = 0;
      var limitX = window.innerWidth - 400; // 設(shè)置元素的最大寬度為屏幕寬度減去元素的寬度  
      state.maxWidth = limitX
      var limitY = window.innerHeight - 600; // 設(shè)置元素的最大高度為屏幕高度減去元素的高度  

      var box = document.getElementById("dragContent")
      box.addEventListener('mouseover', () => {
        if (state.drightDistance == 0) {
          box.style.left = `${state.maxWidth / 10}rem`
          box.style.transitionDuration =  '1s'
          setTimeout(() => {
            state.titleVisible = false
          }, 300)
        } else {
          box.style.transitionDuration =  '0s'
        }
      })
      
      box.addEventListener('mouseout', () => {
        if (state.drightDistance == 0) {
          box.style.left = `${state.maxWidth / 10 + 40}rem`
          box.style.transitionDuration =  '1s'
          setTimeout(() => {
            state.titleVisible = true
          }, 300)
        } else {
          box.style.transitionDuration =  '0s'
        }
      });

      dragContent.onmousedown = (e) => {
        x = e.clientX - dragContent.getBoundingClientRect().left;
        y = e.clientY - dragContent.getBoundingClientRect().top;
        document.onmousemove = function (e) {
          var newX = e.clientX - x;
          var newY = e.clientY - y;
          if (newX < 0) newX = 0; // 防止元素向左拖出屏幕外  
          if (newY < 0) newY = 0; // 防止元素向上拖出屏幕外  
          if (newX > limitX) newX = limitX; // 防止元素向右拖出屏幕外  
          if (newY > limitY) newY = limitY; // 防止元素向下拖出屏幕外  
          dragContent.style.left = newX + 'px';
          dragContent.style.top = newY + 'px';
          state.leftWidth = newX
          state.drightDistance = limitX - newX
          // console.log(state.leftWidth)
        };
        document.onmouseup = () => {
          document.onmousemove = null; // 當(dāng)鼠標(biāo)松開時,移除鼠標(biāo)移動事件  
          console.log('當(dāng)前坐標(biāo)點', state.drightDistance)

          if (state.drightDistance == 0) {
            
          }
        }
      }
    })

    return {
      ...toRefs(state),
    }
  }
}
</script>
<style lang="scss" scoped>
.drag-box {
  width: 100%;
  height: 100vh;
  overflow: hidden;
  position: absolute;
}

#dragContent {
  width: 400px;
  height: 600px;
  position: absolute;
  right: 8rem;
  top: 50%;
  cursor: move;
  .drag-home {
    height: 100%;
    position: relative;
    background-color: #091659;
    border-radius: 3rem;
    .drag-title {
      position: absolute;
      left: -4rem;
      top: calc(50% - 8rem);
      font-size: 2rem;
      width: 4rem;
      height: 16rem;
      background: #0b133d;
      display: flex;
      align-items: center;
      justify-content: center;
      border-radius: 1rem 0 0 1rem
    }
    .drag-switch {
      height: 100%;
      position: relative;
      .message {
        text-align: left;
        padding: 2rem;
        .name {
          font-size: 2.5rem;
          margin: 0.5rem 0;
        }
        .info {
          font-size: 1.4rem;
          margin: 0.3rem 0;
        }
      }
      .drag-button {
        height: 80%;
        background: #22387b;
        position: absolute;
        bottom: 0;
        width: 90%;
        left: 5%;
        border-radius: 2rem;
        .menu {
          margin: 1rem 0;
          height: 10%;
        }
        .stats {
          height: 75%;
          /*background: pink;*/
          justify-content: space-around;
          align-content: start;
          display: flex;
          flex-wrap: wrap;
          .el-button {
            margin: 1rem 0;
          }
          .el-button+.el-button {
            margin-left: unset;
          }
          i {
            margin: 1rem 0;
            width: 8rem;
          }
        }
        .submit {
          height: 15%;
        }
      }
    }
  }
}
</style>

到了這里,關(guān)于原生js實現(xiàn)拖拽效果的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • BCSP-玄子前端開發(fā)之JavaScript+jQuery入門CH07_ECMAScript 6基礎(chǔ)

    4.7.1 ECMAScript 6 簡介 ECMAScript 6.0(簡稱 ES6) 是JavaScript語言的下一代標(biāo)準(zhǔn) 正式發(fā)布于2015年6月 目標(biāo) 使JavaScript語言可以用來編寫復(fù)雜的大型應(yīng)用程序,成為企業(yè)級開發(fā)語言 版本升級 ECMAScript 2015 ECMAScript 2016 ECMAScript 2017 ECMAScript和JavaScript 的關(guān)系 前者是后者的規(guī)格,后者是前者的

    2023年04月27日
    瀏覽(61)
  • 原生JS 表格列拖拽 適用JqGrid

    原生JS 表格列拖拽 適用JqGrid

    頁面引用js就不用多說了,在class添加 不是JqGrid可以注釋這個

    2024年02月07日
    瀏覽(22)
  • 原生JS的拖拽屬性draggable(詳解)

    原生JS的拖拽屬性draggable(詳解)

    摘要 作為h5新增的屬性draggable,它能夠給與一切的html元素拖動的效果。而在這個屬性之下,也有著關(guān)于拖動效果的各個方法。 而這一篇文章,主要就是說一下關(guān)于draggable屬性的使用以及工作場景。 1.了解draggable屬性的使用 對我來講,我希望在學(xué)習(xí)一個知識的時候,最開始就

    2023年04月19日
    瀏覽(24)
  • 原生js實現(xiàn)網(wǎng)頁淘寶產(chǎn)品展示效果,鼠標(biāo)移入小圖展示對應(yīng)大圖(事件委托、事件傳播、冒泡機(jī)制)【含完整代碼】

    原生js實現(xiàn)網(wǎng)頁淘寶產(chǎn)品展示效果,鼠標(biāo)移入小圖展示對應(yīng)大圖(事件委托、事件傳播、冒泡機(jī)制)【含完整代碼】

    淘寶網(wǎng)頁產(chǎn)品展示模塊如下: 當(dāng)鼠標(biāo)移入小圖,在上方會相應(yīng)地展示大圖 當(dāng)鼠標(biāo)移入小圖,在上方會相應(yīng)地展示大圖;且當(dāng)鼠標(biāo)移出,圖片停留在移入時顯示的圖片,不會改變。 本文實現(xiàn)效果如下(鼠標(biāo)移入即改變,不用點擊): 定義圖片列表,為列表添加鼠標(biāo)移入事件

    2024年02月07日
    瀏覽(31)
  • 如何使用CSS實現(xiàn)一個拖拽排序效果?

    如何使用CSS實現(xiàn)一個拖拽排序效果?

    前端入門之旅:探索Web開發(fā)的奇妙世界 歡迎來到前端入門之旅!感興趣的可以訂閱本專欄哦!這個專欄是為那些對Web開發(fā)感興趣、剛剛踏入前端領(lǐng)域的朋友們量身打造的。無論你是完全的新手還是有一些基礎(chǔ)的開發(fā)者,這里都將為你提供一個系統(tǒng)而又親切的學(xué)習(xí)平臺。在這個

    2024年02月11日
    瀏覽(15)
  • 實現(xiàn)簡單的element-table的拖拽效果

    實現(xiàn)簡單的element-table的拖拽效果

    第一步,先隨便創(chuàng)建element表格 第二步,里面的數(shù)據(jù)源tableData直接復(fù)制餓了么上的 第三步,需要安裝sortablejs庫并且在頭部引入 第四步,通過ref獲取table,這里給table的ref設(shè)置為dragTable 第五步,就是獲取table然后設(shè)置它的一些屬性,比如拖拽時的CSS,拖拽時的一些事件等,然后

    2024年02月11日
    瀏覽(28)
  • [WPF]原生TabControl控件實現(xiàn)拖拽排序功能

    [WPF]原生TabControl控件實現(xiàn)拖拽排序功能

    在UI交互中,拖拽操作是一種非常簡單友好的交互。尤其是在ListBox,TabControl,ListView這類列表控件中更為常見。通常要實現(xiàn)拖拽排序功能的做法是自定義控件。本文將分享一種在原生控件上設(shè)置附加屬性的方式實現(xiàn)拖拽排序功能。 該方法的使用非常簡單,僅需增加一個附加屬

    2024年02月08日
    瀏覽(26)
  • 前端學(xué)習(xí)筆記:JavaScript基礎(chǔ)語法(ECMAScript)

    前端學(xué)習(xí)筆記:JavaScript基礎(chǔ)語法(ECMAScript)

    此博客參考b站:【黑馬程序員前端JavaScript入門到精通全套視頻教程,javascript核心進(jìn)階ES6語法、API、js高級等基礎(chǔ)知識和實戰(zhàn)教程】https://www.bilibili.com/video/BV1Y84y1L7Nn?p=76vd_source=06e5549bf018e111f4275c259292d0da 這份筆記適用于已經(jīng)學(xué)過一門編程語言(最好是C語言)的同學(xué),如果你沒有

    2024年02月16日
    瀏覽(67)
  • 3分鐘搞懂:JavaScript 和 ECMAScript

    ECMAScript 是 JavaScript 語言的 國際標(biāo)準(zhǔn) ,JavaScript 是 ECMAScript 的 一種實現(xiàn) (Adobe ActionScript 和 JScript 同樣實現(xiàn)了 ECMAScript)。 ECMAScript 是歐洲計算機(jī)制造商協(xié)會 ECMA(European Computer Manufacturers Association)發(fā)布的瀏覽器腳本語言標(biāo)準(zhǔn)。它是 262 號標(biāo)準(zhǔn)文件,又叫 ECMA-262。 ECMAScript 定義

    2023年04月22日
    瀏覽(27)
  • tauri-vue:快速開發(fā)跨平臺軟件的架子,支持自定義頭部UI拖拽移動和窗口陰影效果

    tauri-vue:快速開發(fā)跨平臺軟件的架子,支持自定義頭部UI拖拽移動和窗口陰影效果

    一個使用 tauri+vue+ts 開發(fā)跨平臺軟件的模板,支持窗口頭部自定義 UI 和拖拽和窗口陰影,不用再自己做適配了,拿來即用,非常 nice。而且已經(jīng)封裝好了 tauri 的 http 請求工具,省去很多彎路。開源地址:GitHub - Sjj1024/tauri-vue: 一個使用tauri和vue開發(fā)跨平臺軟件的架子 使用到的技

    2024年02月12日
    瀏覽(100)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包