vue3横向滚动日期选择器组件(Element Plus)

vue横向滚动日期选择器组件

组件使用到了element-plus组件库和dayjs库,使用前先保证项目中已经下载导入

主要功能:选择日期,点击日期可以让此日期滚动到视图中间,左滑右滑同理,支持跳转至任意日期,支持自定义滚动日期的数量

组件中用到了other.ts
工具代码other.ts

import dayjs from 'dayjs'
import calendar from 'dayjs/plugin/calendar'
import 'dayjs/locale/zh-cn'

dayjs.locale('zh-cn')
dayjs.extend(calendar)
dayjs().calendar(null, {
   
   
  sameDay: '[Today]', // The same day ( Today at 2:30 AM )
  nextDay: '[Tomorrow]', // The next day ( Tomorrow at 2:30 AM )
  nextWeek: 'dddd', // The next week ( Sunday at 2:30 AM )
  lastDay: '[Yesterday]', // The day before ( Yesterday at 2:30 AM )
  lastWeek: '[Last]', // Last week ( Last Monday at 2:30 AM )
  sameElse: 'DD/MM/YYYY' // Everything else ( 7/10/2011 )
})

function judegSame(dj1: dayjs.Dayjs, dj2: dayjs.Dayjs) {
   
   
  return dj1.isSame(dj2)
}

function getRelativeTime(dj: dayjs.Dayjs) {
   
   
  let now = dayjs(dayjs().format('YYYY-MM-DD'))
  if (judegSame(now, dj)) {
   
   
    return '今天'
  }
  now = now.add(1, 'day')
  if (judegSame(now, dj)) {
   
   
    return '明天'
  }
  now = now.add(1, 'day')
  if (judegSame(now, dj)) {
   
   
    return '后天'
  }
  let d = dj.day()
  const backArr = ['日', '一', '二', '三', '四', '五', '六']
  return '周' + backArr[d]
}

export {
   
    dayjs, getRelativeTime }

组件代码SlideDatePicker.vue

<script setup lang="ts">
import {
     
      ArrowLeft, ArrowRight } from '@element-plus/icons-vue';
import {
     
      dayjs, getRelativeTime } from './other';

// 日期加载总量
const {
     
      count } = withDefaults(defineProps<{
     
     
  count: number
}>(), {
     
     
  count: 30
})
const activeIndex = ref(0)
const dateItemRefs = ref<HTMLElement[]>([])
const dateItmeWrapRef = ref<HTMLElement>()
const curDate = ref('') // 日期选择器 选择的日期

const showDateList = ref<Record<string, any>[]>([])

const emit = defineEmits(['dateChange'])

function calc(format?: string) {
     
     
  if (!format) {
     
     
    format = dayjs().format('YYYY-MM-DD')
  }
  showDateList.value = []
  let beforeCount = Math.floor((count + 1) / 2) // 上取整
  let afterCount = Math.floor(count / 2)
  let cur = dayjs(dayjs(format).format('YYY
### Element Plus 表格横向滚动设置 对于在 Vue3Element Plus 中配置 `el-table` 组件横向滚动功能,可以通过多种方式来优化用户体验并解决常见的显示问题。 #### 方法一:CSS 自定义样式覆盖 为了使表格内的内容超出设定宽度时可以水平滚动浏览全部数据,在 CSS 层面定制 `.el-table__body-wrapper` 类的选择器属性。具体做法如下: ```css /* 修改滚动条整体外观 */ .el-table__body-wrapper::-webkit-scrollbar { height: 8px; } /* 修改滑块颜色和大小 */ .el-table__body-wrapper::-webkit-scrollbar-thumb { background-color: rgba(0, 0, 0, .2); border-radius: 4px; } ``` 上述代码片段展示了如何利用 WebKit 浏览器特有的伪类 `-webkit-scrollbar` 来调整滚动条的高度以及滑块的颜色与圆角半径[^1]。 #### 方法二:JavaScript 控制滚动行为 如果希望进一步增强交互体验,比如允许用户通过鼠标滚轮控制横向滚动,则可以在 JavaScript 或 TypeScript 文件里编写相应逻辑处理函数。下面是一个简单的例子说明怎样捕捉鼠标的滚轮事件从而改变表格容器内部元素的位置偏移量: ```javascript import { ref } from &#39;vue&#39;; // ... const tableRef = ref(null); function handleMouseWheel(event){ event.preventDefault(); // 阻止默认动作 let table = tableRef.value?.$refs?.scrollBarRef?.wrapRef; if(table !== undefined && table !== null){ table.scrollLeft += event.deltaY * 0.5; // 放大系数可调 } } ``` 这段脚本实现了监听鼠标滚轮上下滚动的方向,并据此更新表格主体部分相对于视窗左侧边界的距离(`scrollLeft`),以此达到模拟横向滚动的效果[^5]。 #### 解决常见问题 有时可能会遇到一些棘手的情况,例如滚动条未能正确响应用户的操作或是其初始状态不正常等问题。针对这些问题,有开发者建议尝试更改某些 DOM 结构中的定位模式为绝对定位(absolute),这有助于改善布局渲染上的兼容性和稳定性: ```css /* 强制指定滚动条内滑块采用绝对定位 */ :deep(.el-scrollbar__thumb) { position: absolute !important; } ``` 此段声明特别适用于修复因页面结构复杂而导致的滚动组件加载后表现异常的现象[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你熬夜了吗?

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值