zoukankan      html  css  js  c++  java
  • vue-时间插件,效果见图

    <template>
      <div class="select-time-wrapper">
        <h5 class="titie">选择自提时间</h5>
        <div class="select-time-content flex">
          <ul class="days">
            <li
              v-for="(item, i) in days"
              :key="i"
              class="select-day"
              :class="{ current: currentDay === i }"
              @click="currentDay = i"
            >
              {{ item }}
            </li>
          </ul>
          <ul class="time-range">
            <li
              v-for="(item, i) in displayTimeRange"
              :key="i"
              class="select-time"
              @click="handleTimeClick(i)"
            >
              <span class="txt">{{ item }}</span>
              <i class="icon"></i>
            </li>
          </ul>
        </div>
      </div>
    </template>
    
    <script>
    import dayjs from 'dayjs';
    
    const checkNum = num => (num < 10 ? `0${num}` : String(num));
    const suffixZero = str => `${str}:00`;
    const translateToDays = {
      0: '周日',
      1: '周一',
      2: '周二',
      3: '周三',
      4: '周四',
      5: '周五',
      6: '周六'
    };
    const defaultSelectedDay = 0;
    
    export default {
      name: 'SelectTime',
      data() {
        const date = dayjs();
        const tomorrow = date.add(1, 'day');
        const theDayAfterTomorrow = date.add(2, 'day');
        const days = [
          `今日(${translateToDays[date.day()]})`,
          `明日(${translateToDays[tomorrow.day()]})`,
          `${theDayAfterTomorrow.format('M-DD')}(${
            translateToDays[theDayAfterTomorrow.day()]
          })`
        ];
    
        return {
          days,
          currentDay: defaultSelectedDay,
          initialArr: [],
          maxHour: 22,
          minHour: 9,
          selectedTime: ''
        };
      },
      computed: {
        displayTimeRange() {
          const { currentDay, initialArr, minHour, maxHour } = this;
          const currentHour = new Date().getHours();
          const sliceStart =
            currentHour < minHour || currentHour + 1 > maxHour
              ? 0
              : currentHour + 1 - minHour;
    
          return currentDay === defaultSelectedDay
            ? initialArr.slice(sliceStart)
            : [...initialArr];
        }
      },
      created() {
        this.initialArr = this.generateArr();
      },
      methods: {
        generateArr() {
          const { minHour, maxHour } = this;
          var arr = [];
          for (let i = minHour; i < maxHour; i++) {
            arr.push(
              [suffixZero(checkNum(i)), '-', suffixZero(checkNum(i + 1))].join('')
            );
          }
          return arr;
        },
        handleTimeClick(i) {
          this.selectedTime = this.displayTimeRange[i];
        }
      }
    };
    </script>
    
    <style lang="scss" scoped>
    .select-time-wrapper {
      .titie {
        padding: 10px;
        text-align: center;
      }
      .select-time-content {
        display: flex;
    
        .days {
           120px;
          background-color: #ddd;
          text-align: center;
        }
        .time-range {
          flex: 1;
          height: 200px;
          overflow-y: scroll;
          -webkit-overflow-scrolling: smooth;
        }
        .select-day,
        .select-time {
          cursor: pointer;
        }
        .select-day {
          &.current {
            background-color: #fff;
          }
        }
      }
    }
    </style>
    

      

  • 相关阅读:
    盒子模型
    css基本选择器
    css样式写法<link和style>
    将博客搬至CSDN
    Mac AndroidStudio 快捷键整理搜藏
    Android 图片黑白显示 自定义饱和度
    android studio 将包含jar包的项目打包成jar包
    JNI方法命名和方法签名
    Mac 下配置NDK/JNI开发环境,并运行简单demo
    Installation failed with message Failed to establish session报错
  • 原文地址:https://www.cnblogs.com/ilovexiaoming/p/11174910.html
Copyright © 2011-2022 走看看