vue点击左右滑动按钮滑动数据

<template>
  <div style="width: 100%">
          <div class="monitor-list">
            <!-- 左边按钮 -->
            <div class="btn" @click="scrollLeft">
              <i class="el-icon el-icon-caret-left" />
            </div>
            <!-- 中间列表 -->
            <div id="list-box" class="list-box">
              <div id="list" class="list">
                <div v-for="item in monitorList" :key="item.id" class="list-item">
                  <img v-if="item.status" width="60" height="60" src="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic.51yuansu.com%2Fpic3%2Fcover%2F01%2F73%2F89%2F59602dda3b533_610.jpg&refer=http%3A%2F%2Fpic.51yuansu.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1653384554&t=ef6add09ac8538ea7542f061d0ea42be" alt="">
                  <img v-else width="60" height="60" src="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic.51yuansu.com%2Fpic3%2Fcover%2F01%2F73%2F89%2F59602dda3b533_610.jpg&refer=http%3A%2F%2Fpic.51yuansu.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1653384554&t=ef6add09ac8538ea7542f061d0ea42be" alt="">
                  {{ item.name }}
                </div>
              </div>
            </div>
            <!-- 右边按钮 -->
            <div class="btn" @click="scrollRight">
              <i class="el-icon el-icon-caret-right" />
            </div>
          </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      ruleForm: {
        a: '',
        b: 'MB'
      },
      monitorList: [],
      imgList: {
        // alive: require('@/assets/images/icon/device-alive.png'),
        // down: require('@/assets/images/icon/device-down.png')
      }
    }
  },
  created() {
    this.initMonitorList()
  },
  methods: {
    initMonitorList() {
      for (let i = 1; i < 21; i++) {
        this.monitorList.push({
          id: i,
          name: `item${i + 1}`,
          status: 0
        })
      }
    },
    // 左滑动逻辑
    scrollLeft() {
      debugger
      const allLength = this.monitorList.length * 120
      const boxLength = document.getElementById('list-box').clientWidth
      if (allLength < boxLength) return
      const listEl = document.getElementById('list')
      const leftMove = Math.abs(parseInt(window.getComputedStyle(listEl, null)?.left))
      if (leftMove + boxLength - 360 < boxLength) {
        // 到最开始的时候
        listEl.style.left = '0px'
      } else {
        listEl.style.left = '-' + (leftMove - 360) + 'px'
      }
    },
    // 右滑动逻辑
    scrollRight() {
      const allLength = this.monitorList.length * 120
      const boxLength = document.getElementById('list-box').clientWidth
      if (allLength < boxLength) return
      const listEl = document.getElementById('list')
      const leftMove = Math.abs(parseInt(window.getComputedStyle(listEl, null)?.left))
      if (leftMove + boxLength + 360 > allLength) {
        listEl.style.left = '-' + (allLength - boxLength) + 'px'
      } else {
        listEl.style.left = '-' + (leftMove + 360) + 'px'
      }
    }
  }
}
</script>
<style lang="scss" scoped>
.monitor-list {
  display: flex;
  justify-content: space-between;
  height: 95px;

  .btn {
    border: 1px solid #b3d8ff;
    width: 50px;
    height: 100px;
    line-height: 100px;
    text-align: center;
    cursor: pointer;
    background-color: #ecf5ff;
    // icon
    font-size: 24px;
    color: #409eff;

    &:hover {
      background-color: #409eff;
      color: white;
    }
  }
  .list-box {
    width: calc(100vw - 100px);
    overflow: hidden;

    .list {
      width: calc(100vw - 100px);
      display: flex;
      transform: all 2s;
      .list-item {
        width: 100px;
        height: 95px;
        text-align: center;
        padding: 10px;
        cursor: pointer;
        margin-left: 40px;
      }
      position: relative;
      left: 0;
      transition: left 1s;
    }
  }
}
.tabless {
  .textBefore {
    font-size: 12px;
    color: #3d3d3eba;
    &:before {
      content: "*";
      color: red;
      position: absolute;
      left: 11px;
      top: 9px;
    }
  }
  .textUnit {
    font-size: 12px;
    color: #3d3d3eba;
    margin-left: 5px;
  }
  //margin: 200px;
  width: 65%;
  border-collapse: collapse;
  tr {
    height: 50px;
    border-bottom: 1px #F1F1F1 solid;
    text-align: left;
    font-size: 12px;
    color: #3d3d3eba;
    &:nth-child(n+2) {
      height: 60px;
      vertical-align: baseline;
    }
  }
  tr:nth-child(1) {
    font-size: 12px;
    font-weight: bolder;
    color: #3D3D3E;
  }
  th {
    position: relative;
    padding-left: 10px;
    padding-top: 5px;
  }
  th:nth-child(1) {
    padding-left: 20px;
  }
}
</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值