<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 {
width: 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>

  

vue-时间插件,效果见图的更多相关文章

  1. vue使用日期时间插件layDate

    项目中需要用到日期时间插件,尝试用bootstrap.element的时间插件都各有各的报错,对于一个菜鸟来说真的是很痛苦啊.终于,最后用了layDate实现了需要的功能 最终效果: 使用步骤: 1. ...

  2. vue+elementUI封装的时间插件(有起始时间不能大于结束时间的验证)

    vue+elementUI封装的时间插件(有起始时间不能大于结束时间的验证): html: <el-form-item label="活动时间" required> & ...

  3. 写一个Vue loading 插件

    什么是vue插件? 从功能上说,插件是为Vue添加全局功能的一种机制,比如给Vue添加一个全局组件,全局指令等: 从代码结构上说,插件就是一个必须拥有install方法的对象,这个方法的接收的第一个参 ...

  4. vue各种插件汇总

    https://blog.csdn.net/wh8_2011/article/details/80497620(copy) Vue是什么? Vue.js(读音 /vjuː/, 类似于 view) 是一 ...

  5. VUE图片懒加载-vue lazyload插件的简单上手使用(优化版本)

    在用VUE做项目开发的过程中,首页用到了懒加载的方法,查找了一些方法,觉得官网写得太复杂,有一篇博客不错(https://www.cnblogs.com/xyyt/p/7650539.html),但是 ...

  6. vue 常用插件,保存

    UI组件 element- 饿了么出品的Vue2的web UI工具套件 Vux- 基于Vue和WeUI的组件库 mint-ui- Vue 2的移动UI元素 iview- 基于 Vuejs 的开源 UI ...

  7. vue自定义插件封装,实现简易的elementUi的Message和MessageBox

    vue自定义插件封装示例 1.实现message插件封装(类似简易版的elementUi的message) message组件 <template>     <transition  ...

  8. bootstrap时间插件 火狐不显示 完美解决方法

    原文链接:http://www.phpbiji.cn/article/index/id/141/cid/4.html bootstrap时间插件火狐 bootstrap-datetimepicker火 ...

  9. jquery仿ios日期时间插件

    Demo下载: 手机时间控件.zip 使用之前,请在页面中加入以下js和css: jquery-1.9.1.js mobiscroll.core-2.5.2.js mobiscroll.core-2. ...

  10. Asp.net+jquery+ajaxpro异步仿Facebook纵向时间轴效果

    Asp.net+jquery+ajaxpro异步仿Facebook纵向时间轴效果 在一个项目中,用到了时间轴展示产品的开发进度,为了更好用户体验,想到了Facebook的timeline效果, 搜了一 ...

随机推荐

  1. linux系统创建windows启动盘

    平时工作中用到linux的操作命令较多,因此为了方便,就给电脑装了双系统,一般工作的时候,都选择进入linux系统.但是今天有件工作之外的事情需要解决下:创建一个windows启动盘.如果按照往常来说 ...

  2. ccf 201703-4 地铁修建(95)(并查集)

    ccf 201703-4 地铁修建(95) 使用并查集,将路径按照耗时升序排列,依次加入路径,直到1和n连通,这时加入的最后一条路径,就是所需要修建的时间最长的路径. #include<iost ...

  3. python 装饰器 (test = submit(test))

    两层的装饰器,这里对于register不需要进行输入 usename, passwd = 'alex', 'abc123' def register(func): def wrapper(*args, ...

  4. LC 966. Vowel Spellchecker

    Given a wordlist, we want to implement a spellchecker that converts a query word into a correct word ...

  5. 阶段3 3.SpringMVC·_05.文件上传_4 文件上传之Springmvc方式上传代码

    后台提供新的方法,上传的方法复制一份传统上传的代码.改名为fileupload2 配置解析器 名字必须叫做myltipartResolver 里面可以配置一些属性,例如上传文件的大小等. 文件大小 最 ...

  6. JetBrain系列学生免费授权

    1.访问网址:https://www.jetbrains.com/zh/student/ 2.往下滚动,点击立即申请 3.填写邮箱信息 4.确认后,跳转到Thank you页面,上面说已经给注册邮箱发 ...

  7. 一步一步搭建:spark之Standalone模式+zookeeper之HA机制

    理论参考:http://www.cnblogs.com/hseagle/p/3673147.html 基于3台主机搭建:以下仅是操作步骤,原理网上自查 :1. 增加ip和hostname的对应关系,跨 ...

  8. python多媒体文件抽取

    多文件抽取有:只获取url,或直接下载,下面是怎么将数据下载下来,并显示进度. 本节主要介绍urllib模块提供的urlretrieve()函数.urlretrieve()方法直接将远程数据下载到本地 ...

  9. Python assert 关键字

    Python assert(断言)用于判断一个表达式,在表达式条件为 False 的时候触发异常. 断言可以在条件不满足程序运行的情况下直接返回错误,而不必等待程序运行后出现崩溃的情况. 语法格式: ...

  10. mysql的root密码忘了

    忘记密码:https://www.cnblogs.com/ryanzheng/p/9348723.htmlmy.cnf的[mysqld]下加:skip-grant-tables重启 mysql -ur ...