博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自制简单的range(Vue)
阅读量:7230 次
发布时间:2019-06-29

本文共 2709 字,大约阅读时间需要 9 分钟。

废话不多说先上成果图

在这里插入图片描述

实现思路

主要分界面与逻辑两大块

界面分为5个部分

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

逻辑

  • touch3个事件
  • 各滑块长度及位置计算
  • 选中时变色
具体实现步骤
  1. 首先我们明白整个容器的长度是不变的等于左边+中间+右边所以我们可以通过先获取总的容器的宽度并用变量进行保存,这里我用的就是屏幕的宽度。
this.rangeWidth = document.body.clientWidth
  1. 添加vue的三种touch事件
@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事件,恢复原来的样式
//滑动事件方法leftTextTouchStart() {    this.leftClick = true;}, leftTextTouchEnd() {    this.leftClick = false;},//类样式绑定:class="{check_text_div:leftClick}"
  1. 滑动时三大块核心宽度及位置的计算,因为滑动中坐标轴是实时变化,这里我们使用vue的计算属性进行操作
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. 滑动事件中,界面变化及左右两边滑动距离的记录
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.文本内容通过计算值便可实现

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';        }}

核心代码就这些了,撒花完结,优化什么的,你们自己看着来咯

来源:https://segmentfault.com/a/1190000016345725

转载地址:http://gyvfm.baihongyu.com/

你可能感兴趣的文章
【Java】自定义异常
查看>>
Ubuntu14.04server开放rootssh登录权限
查看>>
错误 1 error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
查看>>
Linux 权限基础说明
查看>>
2017级面向对象程序设计寒假作业3
查看>>
迭代器
查看>>
Linux OpenCV 静态链接错误
查看>>
Java多线程&集合类-详细版
查看>>
Flask即插视图与tornado比较
查看>>
springboot笔记(一)
查看>>
学习 - SpringMVC
查看>>
logic标签用法
查看>>
MFC中自定义消息
查看>>
hdu 5258 wyh2000 and pupil(dfs)
查看>>
新安装的ubuntu编辑器问题
查看>>
SOJ - 11598
查看>>
[WC2005]双面棋盘(并查集+分治)
查看>>
C#中利用WebBrowser控件,获得HTML源码
查看>>
Android中通过反射获取资源Id
查看>>
Ubuntu Desktop基本办公环境搭建
查看>>