js实现h5滑动杆range功能

 

去网上找了圈可以手指拖动的滑竿来显示价格区间,奈何都是点击的,产品经理说不愿将就,没法,就只能给自己下手写一个来筛选价格。

1、确定杆上要有两个点。即价格区间的头和尾的价格分别为多少

2、每次滑动的最小步数,我们这是step=100

3、最大价格是多少

4、拖动原点返回当前的时间区间

 

手指按下的时候获取当前的横坐标

 

myRange.prototype.start = function (num, _this) {
    var ev = ev || event;
    if (num == 1) {
        this.initX1 = ev.targetTouches[0].pageX;
    } else {
        this.initX2 = ev.targetTouches[0].pageX;
    }
    this.zIndex++;
    $(_this).css('z-index', this.zIndex)
}

 

手指拖动,获取拖动的距离,并分别用disX保存起来

 

myRange.prototype.move = function (num) {
    var ev = ev || event;
    var moveX = ev.targetTouches[0].pageX;
    if (moveX >= this.min && moveX <= this.max) {
        if (num == 1) {
            this.endX1 = moveX;
            this.disX1 = (moveX - this.$lineOffsetLeft);
            this.setLineWinth(1, 'move')
        } else {
            this.endX2 = moveX;
            this.disX2 = (moveX - this.$lineOffsetLeft);
            this.setLineWinth(2, 'move')
        }
    }
}

手指抬起,计算当前距离是否为step的倍数,如果不是进行计算并取整,(分不同情况,是哪个圆点以及圆点拖动方向)

 

 

myRange.prototype.end = function (num) {
    if (num == 1) {
        if ((this.endX1 - this.initX1) > 0) {//右, 向上取整
            var v = (this.set.step - this.disX1 % this.set.step) + this.disX1;
            v <= this.rangeWidth ? this.disX1 = v : this.disX1 = this.rangeWidth;
            this.setLineWinth(1);
        } else {//左, 向下取整
            this.disX1 = (this.disX1 - this.disX1 % this.set.step);
            this.setLineWinth(1);
        }
    } else {
        if ((this.endX2 - this.initX2) > 0) {//右, 向上取整
            var v = (this.set.step - this.disX2 % this.set.step) + this.disX2;
            v <= this.rangeWidth ? this.disX2 = v : this.disX2 = this.rangeWidth;
            this.setLineWinth(2);
        } else {//左, 向下取整
            this.disX2 = this.disX2 - (this.disX2 % this.set.step);
            this.setLineWinth(2);
        }
    }
}

 

this.setLineWinth(2);为设置圆点和line位置的方法

 

 

 

 

如需要完整案例,可以到这里下载:https://github.com/slailcp/myRange/tree/master/range

效果图如下

 

 

 

 

 

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值