首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >自制简单的range(Vue)

自制简单的range(Vue)

作者头像
IMWeb前端团队
发布于 2019-12-03 09:58:04
发布于 2019-12-03 09:58:04
1.2K00
代码可运行
举报
文章被收录于专栏:IMWeb前端团队IMWeb前端团队
运行总次数:0
代码可运行

本文作者:IMWeb 气势的信心 原文出处:IMWeb社区 未经同意,禁止转载

废话不多说先上成果图
实现思路

主要分界面与逻辑两大块

界面分为5个部分

  • 左滑块长度
  • 左内容位置
  • 中间长度
  • 右滑块长度
  • 右内容位置

逻辑

  • touch3个事件
  • 各滑块长度及位置计算
  • 选中时变色
具体实现步骤
  1. 首先我们明白整个容器的长度是不变的等于左边+中间+右边所以我们可以通过先获取总的容器的宽度并用变量进行保存,这里我用的就是屏幕的宽度。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
this.rangeWidth = document.body.clientWidth
  1. 添加vue的三种touch事件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@touchstart.stop.prevent="leftTextTouchStart" //按下 
@touchmove.stop.prevent="leftTextTouchMove" //滑动 
@touchend.stop.prevent="leftTextTouchEnd"  //松开//右滑块,同上 
@touchstart.stop.prevent="rightTextTouchStart" 
@touchmove.stop.prevent="rightTextTouchMove" 
@touchend.stop.prevent="rightTextTouchEnd"
  1. 使用类绑定的方式,在touchStart事件触发的方式,修改点击的滑块的样式,在松开时触发touchend事件,恢复原来的样式
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//滑动事件方法
leftTextTouchStart() {
    this.leftClick = true;
}, 
leftTextTouchEnd() {
    this.leftClick = false;
},
//类样式绑定
:class="{check_text_div:leftClick}"
  1. 滑动时三大块核心宽度及位置的计算,因为滑动中坐标轴是实时变化,这里我们使用vue的计算属性进行操作
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rangeWidth //整个容器的宽度
leftWidth //左边滑动的距离,通过滑动事件定义
rightWidth //右边滑动的距离,通过滑动事件定义
width() {
    return Math.min(Math.max(0, this.rangeWidth - this.leftWidth - this.rightWidth), this.rangeWidth)//内容宽度应等于总宽度减去左右两边,且大于等于0小于等于总宽度
}
left() {    
    return Math.max(this.leftWidth, 0)//防止左滑出界面
}
right() {
    if (this.left + this.rightWidth <= this.rangeWidth) return Math.max(this.rightWidth - 0.5, 0)//防止右滑出界面
}
  1. 滑动事件中,界面变化及左右两边滑动距离的记录
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
leftTextTouchMove(e) {
    let touch = e.changedTouches[0];
    let clientX = touch.clientX;//获取滑动事件的横坐标值    
    if (clientX >= 0) {//只检测滑块在坐标值在屏幕内       
        if (this.left + this.right <= this.rangeWidth) {//防止左右滑块位置倒置            
            this.leftWidth = clientX;//左滑块距离等于x坐标            //界面操作            
            $('#nowRange').css({'left': this.left, 'width': this.width});
            $('#leftText').css({'left': this.left});
            $('#leftImg').css({'left': this.left});      
        }   
    }
}
rightTextTouchMove(e) {
    let touch = e.changedTouches[0];
    let clientX = touch.clientX;//获取滑动事件的横坐标值    
    if (clientX <= this.rangeWidth) {//只检测滑块在坐标值在屏幕内        
        this.rightWidth = this.rangeWidth - clientX;//右边滑块距离等于总长度减去滑动横坐标       
        if (this.left + this.right <= this.rangeWidth) {//防止左右滑块位置倒置            //界面变化           
            $('#nowRange').css({'width': this.width});
            $('#rightText').css({'right': this.right});
            $('#rightImg').css({'right': this.right});
        }    
    }
},

6.文本内容通过计算值便可实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
leftText() {
    let num = parseInt(this.left / this.rangeWidth * 100);
    if (num === 0 || isNaN(num)) return '不限';    
    return num + 'k';
}
rightText() {
    if (this.rangeWidth === 0) return '不限';    
    let num = parseInt((this.rangeWidth - this.right) / this.rangeWidth * 100);
    if (num >= 0) {
        if (num === 100) return '不限';
        return num + 'k';    
    }
}
核心代码就这些了,撒花完结,优化什么的,你们自己看着来咯

这是我的github,欢迎大佬们猛戳,不定时更新

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-09-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Vue版拖动验证
---- ​ 1. 基础演示 定义一个滑轨: <div id="slideway"></div> 给滑轨上色: #slideway { background-color: #7ac23c; height: 34px; width: 0px; transition: width 0.2s ease; // 过渡的css属性/执行时间/转速曲线(慢-快-慢) } 模拟拖动过程 <script> let w = 0; let interval = setInterval(() =>
前端小鑫同学
2022/12/25
1.7K0
Vue版拖动验证
vue移动端写的拖拽
touchstart 当在屏幕上按下手指时触发 touchmove 当在屏幕上移动手指时触发 touchend 当在屏幕上抬起手指时触发 mousedown mousemove mouseup对应的是PC端的事件 touchcancel 当一些更高级别的事件发生的时候(如电话接入或者弹出信息)会取消当前的touch操作,即触发 touchcancel。一般会在touchcancel时暂停游戏、存档等操作。 效果图
江一铭
2022/06/16
8330
vue移动端写的拖拽
Vue实现pc/H5弹窗拖拽
PC <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <title>pc拖拽</title> <style> .move { positio
明知山
2020/09/02
1.4K0
如何用 vue 制作一个探探滑动组件
前言 嗨,说起探探想必各位程序汪都不陌生(毕竟妹子很多),能在上面丝滑的翻牌子,探探的的堆叠滑动组件起到了关键的作用,下面就来看看如何用vue写一个探探的堆叠组件。 一、功能分析 简单使用下探探会发现,堆叠滑动的功能很简单,用一张图概括就是: 简单归纳下里面包含的基本功能点: 图片的堆叠 图片第一张的滑动 条件成功后的滑出,条件失败后的回弹 滑出后下一张图片堆叠到顶部 体验优化: 根据触摸点的不同,滑动时首图有不同角度偏移 偏移面积判定是否成功滑出 二、具体实现 有了归纳好的功能点,我们实现组件
前端教程
2018/03/29
3.1K0
如何用 vue 制作一个探探滑动组件
移动端前端常见的触摸相关事件touch、tap、swipe等整理
前端的很多事件在PC端和浏览器端可公用,但有些事件却只在移动端产生,如触摸相关的事件
书童小二
2018/09/03
2.8K0
移动端前端常见的触摸相关事件touch、tap、swipe等整理
微信小程序实战开发教程-抽屉菜单
抽屉菜单是app上常见的菜单设计方式,典型的抽屉菜单如下图所示 下面展示如何基于微信小程序实现抽屉菜单,最终效果如下图所示: 页面包含一个主页和抽屉菜单页,为了实现滑动效果,页面采用absolute
极乐君
2018/02/05
3K0
微信小程序实战开发教程-抽屉菜单
利用canvas实现毛笔字帖(二)
2. 第2部分write.js 第二部分决定先介绍write部分,因为controller部分必须要结合write部分才能看到效果。 针对write.js部分,前面有介绍,是用来实现通过鼠标(手指)写字的核心部分。 分析一下要做的事情。
用户1394570
2018/08/08
3.7K0
利用canvas实现毛笔字帖(二)
Vue.js|Nuxt仿制探探堆叠滑动|vue仿Tinder卡片效果
点击右上角筛选按钮,在侧边会出现弹窗。里面的范围滑块、switch开关、Rate评分等组件则是使用Vant组件库。
andy2018
2020/10/13
5.6K0
Vue.js|Nuxt仿制探探堆叠滑动|vue仿Tinder卡片效果
微信小程序之列表左滑删除功能
介绍 第一次写小程序,记录一下遇到的需求以及解决方法。可能功能不是很难,主要是做下记录。为以后遇到相同的需求做铺垫。 什么是左滑删除 用过QQ的人都知道,消息列表内,左滑单个聊天可以删除、置顶的操作。对于移动端窄小的屏幕来说,这种交互可以说是非常的节省地方。故受到了众多产品狗的喜爱。 [image] 实现原理 最外层一个view水平方向排列,里面包含一个内容区view,一个操作区view 让你要展示的布局充满屏幕,通过css样式让超出的删除按钮隐藏 监听touch事件,平移布局显示和隐藏删除按钮(列表每一项
w候人兮猗
2020/06/24
1.2K0
Vue拖拽组件开发实例
vue是一套用于构建用户界面的渐进式框架。可以用他来封装单文件组件来开发更为复杂的单页应用。 本文主要是通过封装一个拖拽组件的例子,来分析Vue组件化相关知识。
京东技术
2018/04/10
4.6K3
Vue拖拽组件开发实例
移动端效果之IndexList
写在前面 接着前面的移动端效果讲,这次讲解的的是IndexList的实现原理。效果如下: 代码请看这里:github 移动端效果之swiper 移动端效果之picker 移动端效果之cellSwipe
糊糊糊糊糊了
2018/05/09
1.1K0
移动端效果之IndexList
10-移动端开发教程-移动端事件
在前端的移动Web开发中,有一部分事件只在移动端产生,如触摸相关的事件。接下来给大家简单总结一下移动端的事件。
老马
2018/02/18
7.5K0
10-移动端开发教程-移动端事件
教你实现一个悬浮可拖动并在滑动页面时会自动收缩的vue侧边组件按钮
实现一个悬浮可拖动且可自定义的一个侧边按钮,在实际的业务开发中可以根据业务需要进行调整
inline705
2021/12/09
6K0
教你实现一个悬浮可拖动并在滑动页面时会自动收缩的vue侧边组件按钮
移动端click事件300ms延迟
一般情况下,如果没有经过特殊处理,移动端浏览器在派发点击事件的时候,通常会出现300ms左右的延迟。也就是说,当我们点击页面的时候移动端浏览器并不是立即作出反应,而是会等上一小会儿才会出现点击的效果。在移动WEB兴起的初期,用户对300ms的延迟感觉不明显。但是,随着用户对交互体验的要求越来越高,现今,移动端300ms的点击延迟逐渐变得明显而无法忍受。
Dawnzhang
2018/12/28
3.1K0
HTML5移动端开发的常用触摸事件
HTML5中新添加了很多事件,但是由于他们的兼容问题不是很理想,应用实战性不是太强,所以在这里基本省略,咱们只分享应用广泛兼容不错的事件,日后随着兼容情况提升以后再陆续添加分享。今天为大家介绍的事件主要是触摸事件:touchstart、touchmove和touchend。
全栈程序员站长
2022/08/31
2K0
移动端拖动滑块验证
因为移动端使用的是touch事件:https://developer.mozilla.org/zh-CN/docs/Web/API/TouchEvent
阿超
2023/01/16
2K0
vue使用canvas签名之移动端
在一些项目业务中,经常会使用到画板,让用户自己去写/画一些东西做标示,比如说在线签电子合约、签名等,如果不用插件,那么如何使用h5的canvas画布来实现这一需求呢? 【本篇只讨论移动端,PC端请看上篇】
流眸
2020/02/14
1.9K0
vue使用canvas签名之移动端
从一个画板demo学习canvas
初学canvas,做了一个画板应用,地址点这里 。本篇为canvas的一些基础思想和注意事项,不是基础api。主要是在于touch事件上的实践经验
Ganother
2019/02/26
7220
第127天:移动端-获取触摸点的位置
$("#demoid").bind('touchstart',function(){ //代码处理});
半指温柔乐
2018/09/11
1.7K0
第127天:移动端-获取触摸点的位置
小程序监听屏幕滑动事件
2.根据触点的起始位置和终止位置计算滑动方向(在data中配置touchx和touchy数值)
Kindear
2020/10/26
4K0
相关推荐
Vue版拖动验证
更多 >
交个朋友
加入前端学习入门群
前端基础系统教学 经验分享避坑指南
加入前端工作实战群
前端工程化实践 组件库开发经验分享
加入前端趋势交流群
追踪前端新趋势 交流学习心得
换一批
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档