资讯专栏INFORMATION COLUMN

自制简单的range(Vue)

sunnyxd / 2325人阅读

摘要:废话不多说先上成果图实现思路主要分界面与逻辑两大块界面分为个部分左滑块长度左内容位置中间长度右滑块长度右内容位置逻辑个事件各滑块长度及位置计算选中时变色具体实现步骤首先我们明白整个容器的长度是不变的等于左边中间右边所以我们可以通过先获取总的

废话不多说先上成果图

实现思路

主要分界面与逻辑两大块

界面分为5个部分

左滑块长度

左内容位置

中间长度

右滑块长度

右内容位置

逻辑

touch3个事件

各滑块长度及位置计算

选中时变色

具体实现步骤

首先我们明白整个容器的长度是不变的等于左边+中间+右边所以我们可以通过先获取总的容器的宽度并用变量进行保存,这里我用的就是屏幕的宽度。

</>复制代码

  1. this.rangeWidth = document.body.clientWidth

添加vue的三种touch事件

</>复制代码

  1. @touchstart.stop.prevent="leftTextTouchStart" //按下 
  2. @touchmove.stop.prevent="leftTextTouchMove" //滑动 
  3. @touchend.stop.prevent="leftTextTouchEnd"  //松开//右滑块,同上 
  4. @touchstart.stop.prevent="rightTextTouchStart
  5. @touchmove.stop.prevent="rightTextTouchMove
  6. @touchend.stop.prevent="rightTextTouchEnd"

使用类绑定的方式,在touchStart事件触发的方式,修改点击的滑块的样式,在松开时触发touchend事件,恢复原来的样式

</>复制代码

  1. //滑动事件方法
  2. leftTextTouchStart() {
  3. this.leftClick = true;
  4. }, 
  5. leftTextTouchEnd() {
  6. this.leftClick = false;
  7. },
  8. //类样式绑定
  9. :class="{check_text_div:leftClick}"

滑动时三大块核心宽度及位置的计算,因为滑动中坐标轴是实时变化,这里我们使用vue的计算属性进行操作

</>复制代码

  1. rangeWidth //整个容器的宽度
  2. leftWidth //左边滑动的距离,通过滑动事件定义
  3. rightWidth //右边滑动的距离,通过滑动事件定义
  4. width() {
  5. return Math.min(Math.max(0this.rangeWidth - this.leftWidth - this.rightWidth), this.rangeWidth)//内容宽度应等于总宽度减去左右两边,且大于等于0小于等于总宽度
  6. }
  7. left() {    
  8. return Math.max(this.leftWidth, 0)//防止左滑出界面
  9. }
  10. right() {
  11.     if (this.left + this.rightWidth <= this.rangeWidth) return Math.max(this.rightWidth - 0.50)//防止右滑出界面
  12. }

滑动事件中,界面变化及左右两边滑动距离的记录

</>复制代码

  1. leftTextTouchMove(e) {
  2. let touch = e.changedTouches[0];
  3.     let clientX = touch.clientX;//获取滑动事件的横坐标值    
  4. if (clientX >= 0) {//只检测滑块在坐标值在屏幕内       
  5. if (this.left + this.right <= this.rangeWidth) {//防止左右滑块位置倒置            
  6. this.leftWidth = clientX;//左滑块距离等于x坐标            //界面操作            
  7. $("#nowRange").css({"left"this.left, "width"this.width});
  8.             $("#leftText").css({"left"this.left});
  9.             $("#leftImg").css({"left"this.left});      
  10. }   
  11. }
  12. }
  13. rightTextTouchMove(e) {
  14.     let touch = e.changedTouches[0];
  15.     let clientX = touch.clientX;//获取滑动事件的横坐标值    
  16. if (clientX <= this.rangeWidth) {//只检测滑块在坐标值在屏幕内        
  17. this.rightWidth = this.rangeWidth - clientX;//右边滑块距离等于总长度减去滑动横坐标       
  18. if (this.left + this.right <= this.rangeWidth) {//防止左右滑块位置倒置            //界面变化           
  19.   $("#nowRange").css({"width"this.width});
  20.             $("#rightText").css({"right"this.right});
  21.             $("#rightImg").css({"right"this.right});
  22.         }    
  23. }
  24. },

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

</>复制代码

  1. leftText() {
  2. let num = parseInt(this.left / this.rangeWidth * 100);
  3. if (num === 0 || isNaN(num)) return "不限";    
  4. return num + "k";
  5. }
  6. rightText() {
  7. if (this.rangeWidth === 0return "不限";    
  8. let num = parseInt((this.rangeWidth - this.right) / this.rangeWidth * 100);
  9.     if (num >= 0) {
  10.         if (num === 100return "不限";
  11.         return num + "k";    
  12. }
  13. }
核心代码就这些了,撒花完结,优化什么的,你们自己看着来咯

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/113916.html

相关文章

  • 自制简单rangeVue

    摘要:废话不多说先上成果图实现思路主要分界面与逻辑两大块界面分为个部分左滑块长度左内容位置中间长度右滑块长度右内容位置逻辑个事件各滑块长度及位置计算选中时变色具体实现步骤首先我们明白整个容器的长度是不变的等于左边中间右边所以我们可以通过先获取总的 废话不多说先上成果图 showImg(https://segmentfault.com/img/remote/1460000016345728?w...

    sewerganger 评论0 收藏0
  • 自制简单诗歌搜索系统

    摘要:项目简介本文将介绍一个笔者自己的项目自制简单的诗歌搜索系统。该项目使用的模块为其中,模块和模块用来制作爬虫,爬取网上的诗歌。 项目简介   本文将介绍一个笔者自己的项目:自制简单的诗歌搜索系统。该系统主要的实现功能如下:指定一个关键词,检索出包含这个关键词的诗歌,比如关键词为白云,则检索出的诗歌可以为王维的《送别》,内容为下马饮君酒,问君何所之?君言不得意,归卧南山陲。但去莫复问,白云...

    SegmentFault 评论0 收藏0

发表评论

0条评论

sunnyxd

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<