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

vue 封裝一個鼠標拖動選擇時間段功能

這篇具有很好參考價值的文章主要介紹了vue 封裝一個鼠標拖動選擇時間段功能。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

vue 封裝一個鼠標拖動選擇時間段功能,vue.js,計算機外設(shè),javascript

vue 封裝一個鼠標拖動選擇時間段功能,vue.js,計算機外設(shè),javascript

?文章來源地址http://www.zghlxwxcb.cn/news/detail-611365.html

?

<template>
  <div class="timeRange">
    <div class="calendar">
      <table>
        <thead>
          <tr>
            <th rowspan="6" class="weekRow"><b>周/時間</b></th>
            <th colspan="24"><b>00:00 - 12:00</b></th>
            <th colspan="24"><b>12:00 - 24:00</b></th>
          </tr>
          <tr>
            <td colspan="2" v-for="index in 24" :key="index">{{ index - 1 }}</td>
          </tr>
        </thead>
        <tbody @mousemove.prevent="handleMouseMove">
          <tr v-for="(item, index) in weekDate" :key="index">
            <td>{{ item }}</td>
            <td class="calendar-atom-time" v-for="i in 48" :key="index + '-' + i"
                :class="{ 'active': selectCells[`${index}_${i}`] }" @mousedown.prevent="handleMouseDown(index, i, $event)"
                @mouseup.prevent="handleMouseUp(index, i)">
            </td>
          </tr>
          <div id="box" v-show="moveStartEvent"></div>
        </tbody>
      </table>
      <div class="table-core">
        <div class="clearfix">
          <span class="pull-left tip-text">可拖動鼠標選擇時間段</span>
          <button class="clearBtn" @click="handleClear">清除所有</button>
        </div>
        <ul>
          <li v-for="(item, index) in selectDate" :key="index" v-if="item.data && item.data.length">
            <label>{{ item.label }}</label>
            <span v-for="o in item.data" :key="o">{{ o[0] }}~{{ o[1] }}</span>
          </li>
        </ul>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  name: 'timeRange',
  data () {
    return {
      // 表列
      weekDate: ['一', '二', '三', '四', '五', '六', '日'],
      // 所選格子
      selectCells: {},
      // 所選時間數(shù)據(jù)(做提交時使用)
      selectDate: {},
      // 記錄鼠標位置
      moveStartEvent: false,
      moveStartColumn: 0, // 列
      moveStarRow: 0, // 行
      moveStartX: 0,
      moveStartY: 0
    }
  },
  created () {

  },
  mounted () {

  },
  methods: {
    // 初始
    init (data) {
      if (data && data instanceof Object) {
        this.selectCells = data
      } else {
        this.selectCells = {}
      }
      this.getSelectDate()
    },

    // 按下
    handleMouseDown (column, row, e) {
      this.moveStartEvent = true
      this.moveStartColumn = column
      this.moveStarRow = row
      this.moveStartX = e.layerX
      this.moveStartY = e.layerY
    },

    // 松開
    handleMouseUp (column, row) {
      if (this.moveStartEvent) {
        this.moveStartEvent = false
        const X = row - this.moveStarRow
        const Y = column - this.moveStartColumn
        const checked = !this.selectCells[`${column}_${row}`]

        if (X > -1 && Y > -1) {
          const obj = this.clone(this.selectCells)
          for (let i = this.moveStartColumn; i <= column; i++) {
            for (let j = this.moveStarRow; j <= row; j++) {
              var key = `${i}_${j}`
              if (checked) {
                obj[key] = checked
              } else if (obj[key]) {
                delete obj[key]
              }
            }
          }

          this.selectCells = obj
          this.$forceUpdate()
          this.getSelectDate()
        }
      }
      this.moveStartDay = 0
      this.moveStarTime = 0
    },

    // 滑動中
    handleMouseMove (e) {
      if (this.moveStartEvent) {
        const dom = this.$el.querySelector('#box')
        const X = e.layerX - this.moveStartX
        const Y = e.layerY - this.moveStartY
        if (X >= 0 && Y >= 0) {
          dom.style.left = this.moveStartX + 'px'
          dom.style.top = this.moveStartY + 'px'
          dom.style.width = X + 'px'
          dom.style.height = Y + 'px'
        }
      }
    },

    // 組合時間數(shù)據(jù)
    getSelectDate () {
      const arr = []
      this.weekDate.forEach((item, index) => {
        arr.push({
          label: item,
          data: []
        })
        for (var i = 1; i <= 48; i++) {
          var o = this.selectCells[`${index}_${i}`]
          if (o) {
            var endTime = i / 2
            var startTime = endTime - 0.5
            if (startTime < 10) {
              startTime = '0' + startTime
            }
            if (endTime < 10) {
              endTime = '0' + endTime
            }
            startTime += ''
            endTime += ''
            if (startTime.indexOf('.5') > -1) {
              startTime = startTime.replace('.5', ':30')
            } else {
              endTime = endTime.replace('.5', ':30')
            }
            if (startTime.indexOf(':30') < 0) {
              startTime += ':00'
            } else {
              endTime += ':00'
            }
            arr[index].data.push([startTime, endTime])
          }
        }
      })
      arr.forEach(item => {
        for (var i = 0; i < item.data.length; i++) {
          var o = item.data
          if (o[i + 1] && o[i][1] === o[i + 1][0]) {
            o[i + 1][0] = o[i][0]
            item.data.splice(i, 1)
            i--
          }
        }
      })
      this.selectDate = arr
    },

    // 清除選擇
    handleClear () {
      this.selectCells = {}
      this.getSelectDate()
      this.$forceUpdate()
    },

    // 獲取數(shù)據(jù)
    getData () {
      return this.selectDate
    }

  }
}
</script>

<style lang="less" scoped>
.timeRange {
  user-select: none;
  position: relative;
  padding: 10px 0;

  .calendar {
    display: inline-block;
  }

  table {
    width: 100%;
    border-radius: 4px;
    border-spacing: 0;
    table-layout: fixed;
    border-collapse: collapse;

    thead {

      th,
      td {
        height: 30px;
      }

      th {
        padding: 5px 0;

      }

      .weekRow {
        width: 100px;
        min-width: 100px;
        padding: 20px 0
      }
    }

    td,
    th {
      outline: 0;
      border: 1px solid #E3E3E3;
      font-size: 12px;
      text-align: center;
      min-width: 11px;
      line-height: 1.6em;
      min-width: 24px;
    }

    tbody {
      position: relative;
      overflow: hidden;

      td {
        height: 20px !important;
      }
    }

    td.active {
      background: #F60457;
    }
  }

  .table-core {
    line-height: 2.4em;
    border: 1px solid #E3E3E3;
    border-top: 0;
    overflow: hidden;
    padding: 10px;

    .clearfix {
      color: #8A8A8A;
      text-align: left;
      height: 22px;
      line-height: 22px;
      margin: 8px 0;
      display: flex;
      font-size: 12px;

      .clearBtn {
        cursor: pointer;
        color: #5775F9;
        font-size: 14px;
        margin-left: auto;
      }
    }

    ul {
      li {
        line-height: 22px;
        margin-bottom: 5px;

        label {
          display: inline-block;
          min-width: 60px;
          color: #8A8A8A;
          text-align: left;
        }

        span {
          font-size: 12px;

          &::after {
            content: "、"
          }

          &:last-child::after {
            display: none;
          }
        }
      }
    }
  }

  #box {
    background: rgba(241, 1, 85, 0.4);
    pointer-events: none;
    position: absolute;
    top: 0;
    left: 0;
  }
}
</style>

到了這里,關(guān)于vue 封裝一個鼠標拖動選擇時間段功能的文章就介紹完了。如果您還想了解更多內(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īng)查實,立即刪除!

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

相關(guān)文章

  • uniapp 小程序 picker 日期時間段選擇(精確到年月日時分+周幾)

    uniapp 小程序 picker 日期時間段選擇(精確到年月日時分+周幾)

    效果圖: picker時間選擇器 精確到年月日時分+周幾 需要引入moment.js,有可能引入后在項目內(nèi)會報錯,可以考慮把選擇日期作為一個組件引入 1、timepage.vue組件封裝 2、官網(wǎng)下載moment.js 下載地址 3、需要顯示時間組件的頁面內(nèi)引用時間組件

    2024年02月14日
    瀏覽(103)
  • 使用 ffmpeg 截取視頻的某一個時間段內(nèi)容

    使用 ffmpeg 截取視頻的某一個時間段,可以結(jié)合以下3個選項: 使用 -ss 選項指定需要截取的開始時間,結(jié)合 -to 或者 -t。 to 指定結(jié)束的時間點,以下命令將截取視頻文件 input.mp4 從 00:00:05.000 開始,到 00:00:15.000 結(jié)束這一段視頻。 t 指定持續(xù)時間,以下命令將截取視頻文件 in

    2024年02月05日
    瀏覽(18)
  • elementUI 時間段快捷選擇及禁用(包含d2-crud-plus中使用)

    elementUI 時間段快捷選擇及禁用(包含d2-crud-plus中使用)

    vue項目elementUI,需求為時間范圍搜索,帶快捷鍵并且只能選擇今天之前,90天內(nèi)的時間。搜索今天為實時數(shù)據(jù),不能使用時間段,只能單獨搜索。 ※注 需求是今天不可選,只有時間為空時才查詢今天,所有下面代碼中時間段快捷選擇時,結(jié)束時間都是昨天。具體可根據(jù)自己需

    2024年01月25日
    瀏覽(18)
  • JavaScript - 判斷當前時間是否在指定區(qū)間內(nèi),例如:9:00~12:00(檢查當前時間是否處于規(guī)定的兩個時間段范圍內(nèi)),適用于 vue.js / uniapp / 微信小程序等前端項目

    例如,您想知道當前時間是否處于 9:00 ~ 12:00 時間區(qū)間內(nèi),然后根據(jù)這個判斷進而實現(xiàn)業(yè)務(wù)邏輯。 如下示例所示, 本文提供一個函數(shù),您只需要傳入 2 個時間區(qū)間,便可得出當前時間是否在該時間區(qū)間范圍內(nèi): 您可以一鍵復(fù)制,直接粘貼到您的項目中。 您只需要傳入開始時

    2024年02月16日
    瀏覽(51)
  • 常用的時間段的時間戳

    獲取 昨天這個時間的時間戳 計算今天0點的時間戳 計算今天23點59分59秒的時間戳 計算昨天0點的時間戳 計算昨天23:59:59 秒的時間戳 計算近7日 0點的時間戳(不包含當天) 計算近30天 0點的時間戳(不包含當天) 計算上月第一天 0點的時間戳 計算上月最后一天 23點的時間戳 計算上周

    2024年02月10日
    瀏覽(19)
  • 判斷兩個時間段是否有交集

    判斷兩個時間段是否有交集

    前言:項目中遇到了類似會議室預(yù)約的時間段被占用,預(yù)約車輛時間段被占用等。 start:預(yù)約開始時間。 end:預(yù)約結(jié)束時間。 必備條件:start = end 思考??: 怎么判斷是否被占用呢? 預(yù)約的時間,與目標數(shù)據(jù)庫中任意一條的存在交集,則可以視為占用。 有交集的情況有那幾

    2024年02月03日
    瀏覽(37)
  • 獲取兩個時間段之間的年月

    ?//獲取兩個時間段之間的年月 ? ? ? ? getMonthBetween(start,end){ ? ? ? ? ? ? ? var result = []; ? ? ? ? ? ? ? var s = start.split(\\\"-\\\"); ? ? ? ? ? ? ? var e = end.split(\\\"-\\\"); ? ? ? ? ? ? ? var min = new Date(); ? ? ? ? ? ? ? var max = new Date(); ? ? ? ? ? ? ? min.setFullYear(s[0],s[1]); ? ? ? ? ?

    2024年03月21日
    瀏覽(22)
  • hive sql,年月日 時分秒格式的數(shù)據(jù),以15分鐘為時間段,找出每一條數(shù)據(jù)所在時間段的上下界限時間值(15分鐘分區(qū))

    獲取當前的年月日 時分秒 date_format(時間字段, ‘yyyy-MM-dd HH:mm:ss’) 將時間字段轉(zhuǎn)為 2023-10-18 18:14:16 這種格式 在指定時間上增加15分鐘 unix_timestamp:獲取當前時間的UNIX時間戳(從 1970-01-01 00:00:00 UTC 到指定時間的秒數(shù)),然后加上 15*60 秒,即15分鐘,就得到了15分鐘后的時間戳

    2024年02月08日
    瀏覽(19)
  • Linux查詢指定時間段的日志

    Linux查詢指定時間段的日志

    Linux查詢指定時間段的日志 可以通過grep或者sed命令查指定時間段日志 1.命令 命令: 2.舉例 【例】查詢今天10月20日10點30分的這一分鐘的日志 第一步,可以先看下日志文件的格式 第二步,通過grep提取和匹配符合條件的字符串行 或者用sed查詢 注意事項

    2024年02月12日
    瀏覽(62)
  • docker查詢某時間段的日志

    參考:docker logs 查看docker容器日志詳解_Mym_zuoyan_Tmac的博客-CSDN博客_docker logs 查找

    2024年02月16日
    瀏覽(22)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包