Vue左滑组件slider的实现

V3基于element slider 滑块改造时间轴线组件 最近在做的一个实时监控功能,需要一个时间轴线组件,下面给大家分享下实现功能的源码。 阅读详情

slider组件与swiper组件不同,slider滑动时并不翻页,实现的是左滑时,显示右侧内容的功能

1、主要思路

        思路和swiper组件类似,主要的也就是对三个触摸事件的处理:touchstart、touchmove、touchend

        在touchstart事件处理程序中记录一些初始值,比如原始坐标,偏移距离;在touchmove事件处理程序中计算实时滑动的距离,让元素随之一起偏移,与swiper不同的是,slider在左滑之前,不能右滑,以及滑动时,右侧元素的宽度要同步变化;在touchend事件处理程序中计算最终的滑动距离,左滑且大于阙值则滑动固定值,右滑或小于阙值则回到起始位置,右侧元素的宽度要同步变化。

        slider组件可以接收三个参数:

        rightWidth: 右侧滑出宽度的百分比

        isClickBack: 点击是否收起右侧

        isMainSlide: 左侧是否滑动(false则覆盖左侧)

2、代码实现

        页面结构:有两个slot来展示左右两边的内容

<template>
  <div class="ths_slider" ref="slider">
    <div class="main"
      @touchstart="touchstart"
      @touchmove="touchmove"
      @touchend="touchend">
      <slot name="main"></slot>
    </div>
    <div class="right" ref="right">
      <slot name="right"></slot>
    </div>
  </div>
</template>

        初始设置:记录页面宽度,根据参数isMainSlide来判断滑动的元素

mounted () {
  this.pageWidth = document.documentElement.clientWidth
  this.sliderEle = this.isMainSlide ? this.$refs.slider : this.$refs.right
}

        事件处理:

touchstart (e) {
  this.originalPos = e.touches[0].pageX
  const transform = this.sliderEle.style.transform
  this.originalLeft = Number(transform ? transform.split('(')[1].split('px')[0] : 0)
  this.oriRigWidth = this.originalLeft < 0 ? Number(this.$refs.right.style.width.split('px')[0]) : 0
},
touchmove (e) {
  let moveDistance = e.touches[0].pageX - this.originalPos // >0 右滑,<0 左滑
  if (moveDistance > 0 && this.originalLeft >= 0) { // 未向左边滑动时,不能右滑
    return false
  }
  this.doSlide(moveDistance / 2 + this.originalLeft) // 除以2来控制滑动速度
},
touchend (e) {
  const moveDistance = e.changedTouches[0].pageX - this.originalPos // >0 右滑,<0 左滑
  let distance
  if (!this.isClickBack && moveDistance === 0) { // 点击时不收起右侧
    return false
  }
  if ((-moveDistance) > 50) { // 向左滑动超过阙值时,右侧滑出固定距离
    distance = this.pageWidth * this.rightWidth / 100
  } else { // 向左滑动未超过阙值,或向右滑动时,回原位
    distance = 0
  }
  this.doSlide(-distance, true)
},
/**
 * 滑动方法---位置变化 && 右侧宽度变化
 * @param {Number} distance 滑动距离
 * @param {Boolean} animate 滑动是否有动画效果
 */
doSlide (distance, animate = false) {
  this.sliderEle.style.transform = `translateX(${distance}px)`
  this.$refs.right.style.width = -distance + 'px'
  if (this.isMainSlide) {
    this.sliderEle.style.transition = animate ? 'transform .5s' : 'initial'
    this.$refs.right.style.transition = animate ? 'width .5s' : 'initial'
  } else {
    this.sliderEle.style.transition = animate ? 'transform .5s, width .5s' : 'initial'
  }
}

3、组件使用

        父组件可以调用slider组件的doSlide()方法来实现点击唤出右侧元素

<t-slider class="slider">
  <template slot="main">左侧滑动</template>
  <template slot="right">
    <div class="edit">编辑</div>
    <div class="delete">删除</div>
  </template>
</t-slider>
<t-slider class="slider" :rightWidth="rightWidth" :isMainSlide="false">
  <template slot="main">
    <div>覆盖左侧</div>
    <div class="btn" @click="showRight">点击唤出</div>
  </template>
  <template slot="right">
    <div class="newContent">newContent</div>
  </template>
</t-slider>
<t-slider class="slider" :isClickBack="false">
  <template slot="main">点击不收起</template>
  <template slot="right">
    <div class="edit">编辑</div>
    <div class="delete">删除</div>
  </template>
</t-slider>
components: {TSlider},
data () {
  return {
    pageWidth: null,
    rightWidth: 80
  }
},
mounted () {
  this.pageWidth = document.documentElement.clientWidth
},

methods: {
  showRight () {
    this.$refs.mainSlider.doSlide(-this.pageWidth * this.rightWidth / 100, true)
  }
}

4、效果展示

 

自己封装vue组建之Stone-Slider组件 Stone-Slider组件 目录 1. 引入stone-slider.scss 2. Slider基础用法 3. 离散值 4. 带有输入框 5. 竖向模式 6. 展示标记 7. script源码 1. 引入stone-slider.scss 在main.js中引入stone-slider.scss require('@/assets/css/stone-slider.scss') 给el-switch添加stone-slider样式。 2. Slider基础用法 [外链图片转存失败,源站可能有防盗链 阅读详情

相关推荐

基于better-scroll封装slider组件

前言 轮播图可以说是在开发中必不可少的组件。接下来这篇文章就基于better-scroll封装一个简单的slider。 better-scroll简介 better-scroll可以说是在Vue开发移动端中最好用的滚动视图的组件,基本上可以解决移动端各种滚动场景需求,核心是借鉴了iscroll的实现,而且API设计基本兼容iscroll.如果您想详细的了解,可以点击查看better-scro

Super灬LV 1815

Vue 实现带拖动功能的时间轴

用于设置时间轴滑块的初始日期,格式通常为 YYYY-MM-DD。:一个数组,用于标记特定日期,在时间轴上会有相应的标记显示。:一个数组,用于锁定日期,当滑动结束时自动跳到指定的日期。:一个布尔值,用于控制是否显示背景遮罩。

weixin_53954018的博客 4087

js实现移动端时间轴插件

该时间轴可以完全自定义实现自己想要的样子,压缩包中有例子,直接拿来用就可以了

Vue.js 带拖动和播放功能的时间轴

drag-timeline-vue 带拖动功能的时间轴 Demo Github 📦 Install npm install --save drag-timeline-vue 全局引用 main.js import DragTimelineVue from 'drag-timeline-vue/packages/index' Vue.use(DragTimelineVue) 🔧 Usage <DragTimelineVue v-model="timelineValue"

qq_37236395的博客 1万+

vue-date-quick-slider:为https构建的Vue日期滑块库

Vue Date快速滑块 为构建的Vue日期滑块库。 它旨在提供一种简单易用的日期过滤器,只需单击一下按钮即可来回导航。 它React灵敏,并与时俱进。 建于 2.x-前端框架 -令人惊叹JavaScript DateTime库 安装 npm $ npm install --save vue-date-quick-slider import dateQuickSlider from 'vue-date-quick-slider' ; export default { // ... components : { dateQuickSlider } // ... } 贡献 如果您想帮助该库进一步发展,或者看到代码中的任何错误,请在GitHub上提交问题。 您可以通过克隆存储库并按照以下说明运行它来在本地构建和更改此库。 始终欢迎请求请求! 构建设置 # in

Ubuntu 22.04 安装 IsaacLab 2.1.0

本文介绍了IsaacLab的完整安装流程:1)创建Python3.10虚拟环境;2)安装PyTorch2.5.1(CUDA11.8);3)升级pip并安装IsaacSim4.5.0;4)克隆IsaacLab仓库;5)运行安装脚本(需接受EULA)。若遇cmake缺失错误,需执行sudo apt安装。安装完成后可通过Ant-v0训练任务验证,成功运行后将显示IsaacSim窗口和训练完成提示。注意:IsaacSim不同版本可共存于不同环境。

weixin_47880303的博客 2222

vue3组件篇 Slider

slider组件已成为前端开发中广泛使用的UI组件之一。Slider组件可以让用户在一个可选范围内选择一个值,如音量、进度条等。Slider组件的设计和功能可以有很多种变化,但通常包含一个滑块和一个轨道。用户可以通过拖动滑块来选择一个值,滑块的位置在轨道上表示该值。在前端开发中,Slider组件可以使用HTML、CSS和JavaScript实现。

秋来九月八 7072

Java + Selenium + TestNg + Allure Web UI 自动化

我们知道,在Python中针对Web UI自动化有Python + Selenium + Pytest/Unittest +Allure的技术栈。那么对于Java而言,也有其独特的Web UI 自动化技术栈。相同的,我们同样的运用Selenium框架,测试报告同样运用Allure。不同的是,我们运用的语言由Python转化为了Java,测试用例管理框架从Pytest转化为了TestNG。

qq_45594960的博客 1911

DeepSeek 助力 Vue 开发:打造丝滑的滑块(Slider)

在自然语言处理任务中,如果训练数据中存在大量错别字、语法错误或语义模糊的文本,模型在学习过程中就可能学到错误的语言模式,从而导致生成的文本质量下降,无法准确理解用户的意图。此外,数据的多样性也至关重要。如果训练数据过于单一,模型可能无法学习到各种语言表达和语义理解,从而在处理复杂任务时表现不佳。

宝码香车的博客 1383

LIN总线CAPL函数实战——动态控制报文发送(linDeactivateSlot与linActivateSlot)

本文深入解析了LIN总线测试中动态控制报文发送的核心CAPL函数linDeactivateSlot与linActivateSlot的实战应用。通过详细拆解函数参数、生效范围及限制,并结合故障注入、功耗测试等实际场景的代码示例,指导测试工程师在仿真LIN主节点时,灵活调度报文发送,实现高效自动化测试。

weixin_29255731的博客 347

(南京观海微电子)——GH700X调试指南--SPI 接口+LVDS-测试盒使用方法

1表示OTP完成后,读取烧录值是否一致来判断是否烧录成功,2表示同时检测VCOM是否一致以及烧录次数是否增加,3表示不做任何检测,由用于自行在程序中判断。[格式]:SetFindVcomEn (<开启或关闭>),ON表示开启VCOM搜寻,默认是开启的,只要使能OTP烧录,按OTP按键则进行VCOM查询;[功能]:OTP完成检测类别,用于设置OTP完成后检测OTP次数还是OTP值来判断OTP是否成功。[功能]:用于设置VCOM查询使能,比如需要烧全代码而不需要对VCOM查询时,可以禁止VCOM查询。

m0_75095200的博客 1663

Vue组件新势力:vue-slider-component的滑动交互革命

在数字交互的世界里,滑动条看似简单却暗藏玄机。当产品经理要求"丝滑如黄油"的拖拽体验,设计师抛出"五彩斑斓的黑"的样式需求,前端开发者往往陷入"调参两小时,体验差口气"的困境。今天要介绍的**vue-slider-component**,正是为解决这些痛点而生的Vue生态滑动交互利器。 ## 核心优势:重新定义滑动体验 这款组件凭借五大差异化优势,在同类产品中脱颖而出: - **极致定制自由

gitblog_00036的博客 928

APB Timer验证环境搭建——学习笔记(6)

(1)为RELOAD VALUE配置初始值32'h8000_0000,设定边界值32'h4000_0000,可以看到减到想要的边界值的时候,counter重新加载RELOAD VALUE,重新开始计数;这根线,统计等待到中断的次数,与理论值做。(2)设定Reload value。(1)由于counter。recount总共次数;

qq_41651535的博客 497

vue-slider-component:让交互更丝滑的Vue滑动条解决方案

### 1.1 双向绑定的响应式灵魂 像给滑块装上了"神经中枢",数据变化实时反馈,用户操作即时响应。Vue的响应式系统让滑动条与数据模型无缝同步,无需手动操作DOM。 ### 1.2 高度可定制的UI基因 组件设计采用"乐高积木"理念,从颜色到形状,从刻度到tooltip,每个细节都能按需调整,完美融入你的项目风格。 ### 1.3 轻量高效的性能表现 核心代码仅3个基础类(VueSlide

gitblog_00423的博客 792

代谢组数据分析(十九):随机森林构建代谢组预后模型

建立胃癌(GC)预后模型时,从队列3中的181名患者中,使用右删失结果数据进行了随机分层抽样,分为训练数据集(n = 121)和测试数据集(n = 60)。训练了一个包含1000棵树的随机生存森林(RSF)模型,根据它们基于排列的特征重要性来选择突出的特征。通过再次训练随机生存模型,并选取28种代谢物,建立了显示出色预测能力(AUROC = 0.832,95% CI:0.697-0.951)的最佳模型,用于预测测试数据集中GC患者的生存结果。

专注生信领域 1713

2026年数字IC设计紫光展锐笔试带答案解析

本文是一份数字IC设计工程师/芯片验证工程师的笔试样题,包含单选题和多选题两部分。单选题共20题(每题2分),涵盖数字电路、C++/Verilog编程、芯片设计基础等内容,例如D/A转换计算、面向对象编程特性、三极管工作区域、Verilog仿真时间格式等。多选题15题(每题2分),考察Hold违例修复方法、验证方法学等知识点。试卷总分100分,考试时长90分钟,题型设计兼顾基础理论与工程实践,重点测试应聘者对芯片设计核心概念和工具链的掌握程度。部分题目解析详细说明了计算过程或概念原理,如第1题通过二进制转换

Open 110

Vue3滑动输入条(Slider)

数字滑动输入条组件,支持:单滑块;双滑块;禁用;自定义数值范围;自定义步长;自定义刻度标记;垂直模式;格式化 tooltip;隐藏 tooltip;始终显示 tooltip;自定义样式;鼠标拖动滑块输入;鼠标点击输入;键盘上/下/左/右按键输入;总之,功能丰富,简单易用😁😁

Vue Amazing UI(Vue3 + TypeScript + Vite)组件库唯一开发维护者 8574

深信服全产品线新版图标库 Visio版+PPT版【2023年最新整理】

深信服全产品线新版图标库Visio版(含网络位置符号以及其他网络设备和外设图标)有朋友想要我整理一下深信服的相关图标,那么今天,瑞哥给老铁们整理了。运维漫谈是瑞哥针对运维领域的一个公众号,欢迎大家的关注哦!篇幅原因,就只展示那么多,有需要的朋友自行下载。SANGFOR 各产品图标-Visio版。你好,这里是网络技术联盟站。SANGFOR全产品线图标。深信服设备前置面板-AC。

网络技术联盟站 3692

vue2组件系列:Slider 滑块

  我所接触到的Slider滑块应用的场景,主要有图片的放大缩小,调节声音的大小。不知道小伙伴们的应用场景都有哪些呢?欢迎在文章下方留言讨论哈。   准备工作:   创建一个页面: Slider.vue在router.js里配置 Slider页面的路由   {   path: '/slider',   name: 'slider',   component: ()=> import('./views/Slider.vue')   }   在index.vue里添加一项     ..

linjingyg的博客 7299

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【亲测免费】 Vue Slider 组件使用教程

Vue Slider 组件使用教程 1、项目介绍 vue-slider 是一个高度定制化的滑块组件,适用于 Vue.js 项目。它提供了丰富的配置选项,可以满足各种滑块需求,如范围选择、值显示、样式定制等。该组件易于集成,支持多种引入方式,适合快速开发和原型设计。 2、项目快速启动 安装 首先,通过 npm 或 yarn 安装 vue-slider 组件: npm install vue-slid...

gitblog_01184的博客 1472

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Vue:自定义slider滑块组件

Vue:自定义slider滑块组件

qq_44776454的博客 782

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

移动端vue slider滑块组件、单滑块和双滑块,及其二次封装

1.介绍与演示 滑块组件,支持滑动,点击 演示: 2.安装 npm install z-slider-vue -S 3.引入 import Slider from 'z-slider-vue' import '../node_modules/z-slider-vue/dist/z-slider-vue.css' Vue.use(Slider) 4.使用 <double-slider :leftx="0" //左边滑块起始位置 :rightx="1" //右边滑

qq_44812835的博客 4944

Vue Slider 组件指南

Vue Slider 组件指南 1. 项目目录结构及介绍 在深入探讨之前,值得注意的是,由于提供的信息并不直接涉及特定项目的内部目录结构,以下是对一般Vue项目及其可能与vue-slider-component相关的结构的概述。 一个典型的基于Vue的项目,包括使用vue-slider-component,可能会有如下的基本目录结构: my-vue-app/ │ ├── public/ ...

gitblog_00269的博客 576

【鸿蒙开发】系统组件Slider

鸿蒙开发arkui组件,Slider组件,Progress组件

d312697510的博客 1072

Matlab中slider怎么用,vue组件开发之slider组件使用详解

本文实例为大家分享了vue组件开发之slider组件的具体使用代码,供大家参考,具体内容如下代码如下:{{item.title}}<>export default {name: 'slider',data (){return {count: 0,items:[{name:"1",id:1,title:"我是图1的内容"},{name:"2",id:2,title:"我是图2的内容"},...

weixin_33900596的博客 370
上一篇: Vue滑动翻页组件swiper的实现---第二版
下一篇: Vue过渡transition实现轮播组件
latency_cheng
博客等级 码龄11年 53粉丝 40原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值