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

vue 進度條組件(可拖拽可點擊)

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

1.詳情介紹

在日常的開發(fā)當中,隨著項目的需求復雜化,自定義組件也越來越常見,而且擴展性也比一些組件庫要更加全面,比如視頻播放器的進度條。

可自定義設置以下屬性:
當前進度value,默認50
是否可拖拽isDrag,默認true
設置最小值min,默認0
設置最大值max,默認100
進度條顏色bgColor,默認#4ab157

效果如下圖:
vue進度條組件,實用組件,vue.js,javascript,前端,動畫,css3

2.編碼介紹

template部分

<template>
  <div class="slider" ref="slider" @click.stop="handelClickSlider">
    <div class="process" :style="{ width,background:bgColor }"></div>
    <div class="thunk" ref="trunk" :style="{ left }">
      <div class="block" ref="dot"></div>
    </div>
  </div>
</template>

js部分

<script>
/*
 * min 進度條最小值
 * max 進度條最大值
 * v-model 對當前值進行雙向綁定實時顯示拖拽進度
 * */
export default {
  props: {
    // 最小值
    min: {
      type: Number,
      default: 0,
    },
    // 最大值
    max: {
      type: Number,
      default: 100,
    },
    // 當前值
    value: {
      type: Number,
      default: 0,
    },
    // 進度條顏色
    bgColor: {
      type: String,
      default: "#4ab157",
    },
    // 是否可拖拽
    isDrag: {
      type: Boolean,
      default: true,
    },
  },
  data() {
    return {
      slider: null, //滾動條DOM元素
      thunk: null, //拖拽DOM元素
      per: this.value, //當前值
    };
  },
  mounted() {
    this.slider = this.$refs.slider;
    this.thunk = this.$refs.trunk;
    var _this = this;
    if (!this.isDrag) return;
    this.thunk.onmousedown = function (e) {
      var width = parseInt(_this.width);
      var disX = e.clientX;
      document.onmousemove = function (e) {
        // value, left, width
        // 當value變化的時候,會通過計算屬性修改left,width
        // 拖拽的時候獲取的新width
        var newWidth = e.clientX - disX + width;
        // 計算百分比
        var scale = newWidth / _this.slider.offsetWidth;
        _this.per = Math.ceil((_this.max - _this.min) * scale + _this.min); //取整
        // 限制值大小
        _this.per = Math.max(_this.per, _this.min);
        _this.per = Math.min(_this.per, _this.max);

        _this.$emit("input", _this.per);
      };
      document.onmouseup = function () {
        //當拖拽停止發(fā)送事件
        _this.$emit("stop", _this.per);
        //清除拖拽事件
        document.onmousemove = document.onmouseup = null;
      };
    };
  },
  methods: {
    handelClickSlider(event) {
      //禁止點擊
      if (!this.isDrag) return;
      const dot = this.$refs.dot;
      if (event.target == dot) return;
      //獲取元素的寬度l
      let width = this.slider.offsetWidth;
      //獲取元素的左邊距
      let ev = event || window.event;
      //獲取當前點擊位置的百分比
      let scale = ((ev.offsetX / width) * 100).toFixed(2);
      this.per = scale;
    },
  },
  computed: {
    // 設置一個百分比,提供計算slider進度寬度和trunk的left值
    // 對應公式為  當前值-最小值/最大值-最小值 = slider進度width / slider總width
    // trunk left =  slider進度width + trunk寬度/2
    scale() {
      return (this.per - this.min) / (this.max - this.min);
    },
    width() {
      return this.slider ? this.slider.offsetWidth * this.scale + "px" : "0px";
    },
    left() {
      return this.slider ? this.slider.offsetWidth * this.scale - this.thunk.offsetWidth / 2 +"px" : "0px";
    },
  },
  watch: {
    value: {
      handler: function () {
        this.per = this.value;
      },
    },
  },
};
</script>

css部分

<style scoped>
.box {
  margin: 100px auto 0;
  width: 80%;
}
.clear:after {
  content: "";
  display: block;
  clear: both;
}
.slider {
  position: relative;
  margin: 20px 0;
  width: 100%;
  height: 10px;
  top: 50%;
  background: #747475;
  border-radius: 5px;
  cursor: pointer;
  z-index: 99999;
}
.slider .process {
  position: absolute;
  left: 0;
  top: 0;
  width: 112px;
  height: 10px;
  border-radius: 5px;
  background: #4ab157;
  z-index: 111;
}
.slider .thunk {
  position: absolute;
  left: 100px;
  top: -4px;
  width: 10px;
  height: 6px;
  z-index: 122;
}
.slider .block {
  width: 16px;
  height: 16px;
  border-radius: 50%;
  background: rgba(255, 255, 255, 1);
  transition: 0.2s all;
}
.slider .block:hover {
  transform: scale(1.1);
  opacity: 0.6;
}
</style>

組件使用

 <slisd :min="0" :max="100" :value="50" :isDrag="true" bgColor="#4ab157"></slisd>

本篇文章就介紹到這里,如果想要學習更多vue系列知識,點擊關注博主文章來源地址http://www.zghlxwxcb.cn/news/detail-575491.html

到了這里,關于vue 進度條組件(可拖拽可點擊)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

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

領支付寶紅包贊助服務器費用

相關文章

  • 基于vue element-ui 封裝上傳圖片組件 功能:上傳,刪除,預覽,上傳圖片水印,拖拽排序,上傳進度條等

    基于vue element-ui 封裝上傳圖片組件 功能:上傳,刪除,預覽,上傳圖片水印,拖拽排序,上傳進度條等

    我們在開發(fā)后臺時肯定避免不了上傳圖片的功能 例如: 上傳圖片回顯 上傳完成 : 預覽查看 , 刪除等 如果是圖片列表,還可能讓你拖動圖片排序 有的后臺項目可能要給圖片添加水印,添加標記 有的后臺可能要炫酷一點 添加進度條功能 現(xiàn)在我們要完成上面的一系列功能,這里我

    2024年02月16日
    瀏覽(28)
  • Vue3封裝可拖拽的彈窗

    核心代碼(復制就可以使用了) 使用方式

    2024年01月19日
    瀏覽(25)
  • 基于vue的可拖拽設計的報表看板設計器

    基于vue的可拖拽設計的報表看板設計器

    gitee上的不錯項目,基于vue實現(xiàn)的可拖拽的看板設計器可以自由搭配顏色和圖標,開發(fā)者可以只關注業(yè)務數(shù)據(jù)接口,前端不擅長的人員可以直接輕松上手。 1.可支持的元素 文字,邊框,常見圖表,柱形圖,折線餅圖等等,還有一些列表數(shù)據(jù),當然還支持iframe嵌套,當組件滿足

    2024年02月11日
    瀏覽(34)
  • 基于vue+Element UI的文件上傳(可拖拽上傳)

    基于vue+Element UI的文件上傳(可拖拽上傳)

    drag: 支持拖拽上傳 action:必選參數(shù),上傳的地址 ref:這里主要是用于文件上傳完成后清除文件的 on-remove:文件列表移除文件時的鉤子 auto-upload:是否在選取文件后立即進行上傳 on-change:文件狀態(tài)改變時的鉤子,添加文件、上傳成功和上傳失敗時都會被調用 注:這里使用的

    2023年04月08日
    瀏覽(30)
  • 【JavaScript】JS實用案例分享:動態(tài)生成分頁組件 | 通過按鍵實現(xiàn)移動控制

    【JavaScript】JS實用案例分享:動態(tài)生成分頁組件 | 通過按鍵實現(xiàn)移動控制

    CSDN話題挑戰(zhàn)賽第2期 參賽話題:學習筆記 ??? NodeJS專欄:Node.js從入門到精通 ??? 博主的前端之路( 源創(chuàng)征文一等獎作品 ):前端之行,任重道遠(來自大三學長的萬字自述) ??? TypeScript知識總結:TypeScript從入門到精通(十萬字超詳細知識點總結) ????? 個人簡介

    2023年04月21日
    瀏覽(30)
  • Vue中使用vue-drag-resize實現(xiàn)窗體可拖拽和隨意縮放大小

    Vue中使用vue-drag-resize實現(xiàn)窗體可拖拽和隨意縮放大小

    若依前后端分離版手把手教你本地搭建環(huán)境并運行項目: 若依前后端分離版手把手教你本地搭建環(huán)境并運行項目_ruoyi本地調式_霸道流氓氣質的博客-CSDN博客 在上面的基礎上,實現(xiàn)彈窗窗體可移動以及隨意縮放大小。 效果如下 ? 注: 博客: https://blog.csdn.net/badao_liumang_qizhi?

    2024年02月11日
    瀏覽(25)
  • vue+echart實現(xiàn)3d地圖可拖拽、縮放、區(qū)域填充顏色(geo3D)

    功能背景 一個略微比2d地圖炫酷一些的3d地圖, 1、可對區(qū)域進行不同顏色填充。 2、可拖拽縮放地圖 3、鼠標懸停高亮某區(qū)域。 (注意:當開啟了鼠標懸停series,并高亮某個數(shù)據(jù)的時候,會導致地圖的拖拽縮放出現(xiàn)卡頓,因為相當于是事件重疊了。。。目前還沒想到好的解決方

    2024年02月13日
    瀏覽(29)
  • vue2實現(xiàn)可拖拽甘特圖(結合element-ui的gantt圖)

    vue2實現(xiàn)可拖拽甘特圖(結合element-ui的gantt圖)

    ? 接到公司需求,要做一個可拖拽的甘特圖來實現(xiàn)排期需求,官方的插件要付費還沒有中文的官方文檔可以看,就去找了各種開源的demo來看,功能上都不是很齊全,于是總結了很多demo,合在一起組成了一版較為完整的滿足需求的甘特圖。 1.拖拽? 拖拽功能是甘特圖的主要功

    2024年02月03日
    瀏覽(22)
  • vue3.0 安卓和ios h5 移動端音頻自定義圓環(huán)可拖拽播放(兼容微信瀏覽器)

    vue3.0 安卓和ios h5 移動端音頻自定義圓環(huán)可拖拽播放(兼容微信瀏覽器)

    安裝? npm install weixin-js-sdk 引入 template ? ? div class=\\\"circle_box\\\" ? ? ? ? div id=\\\"content\\\"/div ? ? ? ? ?img class=\\\"img_0\\\" src=\\\"https://img.yzcdn.cn/vant/cat.jpeg\\\" alt=\\\"\\\" ? ? ? ? ?img @click=\\\"changeType\\\" class=\\\"img_1\\\" v-show=\\\"playbool\\\" src=\\\"@/assets/decompression/pressure_audio_play.png\\\" alt=\\\"\\\" ? ? ? ? ?img @click=\\\"changeType\\\"

    2023年04月23日
    瀏覽(24)
  • LVGL可拖拽窗口實現(xiàn)

    LVGL可拖拽窗口實現(xiàn)

    一、 LVGL拖拽功能 ? ? LVGL obj提供了使能拖拽功能的函數(shù): ? ? 不過在多元素界面,例如下邊在 bg win上創(chuàng)建了若干個 sub win,bg win大部分面積被覆蓋的情況下,如果單純將 bg win 設置為可拖拽,則只有點擊到? 沒有被覆蓋的區(qū)域才能成功,效果不滿足要求;如果簡單的把 sub

    2023年04月25日
    瀏覽(19)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包