博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
手机端效果(一)滑块效果
阅读量:6914 次
发布时间:2019-06-27

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

现在写前端代码有各种各样的框架和库,轻轻松松就实现我们要的功能,写久了,原生js可能会模糊,为了巩固,会陆续写一些原生的代码,今天就从这个开始。

先上效果:

图片描述

手机端的滑块效果,做webapp的可能都会遇到过,下面来一次实现。

html结构

css代码:

*{            box-sizing: border-box;        }        .range{            width: 90%;            height: 40px;            position: relative;            margin: auto;            -webkit-tap-highlight-color: rgba(0,0,0,0);        }        .range:before,.range-bar,.range-text,.range-progress{            position: absolute;            top:50%;            transform: translateY(-50%);            -webkit-transform: translateY(-50%);        }        .range:before{            content: '';            display: block;            background-color: #ccc;            width: 100%;        }        .range:before,.range-progress{            height: 2px;            left:0;        }        .range-bar{            position: absolute;            width: 30px;            height: 30px;            border-radius: 50%;            background-color:#ccc ;        }        .range-progress{            background-color:#00b3ee;        }        .range-text{            top:100%;            left:90%;            -webkit-transform: translateY(-50%);            transform: translateY(-50%);            color:#999;        }

js逻辑

/*阻止页面的默认滑动*/        window.addEventListener('touchmove',function (e) {            e.preventDefault();        })        var range=$('.range');        var bar=$('.range-bar');        var progress=$('.range-progress');        var text=$('.range-text');        var maxw=range.offsetWidth-bar.offsetWidth;//计算可滑动的最大距离        var rangex=range.offsetLeft;        var half=bar.offsetWidth/2;        bar.addEventListener('touchstart',function (event) {            var left=event.touches[0].pageX-rangex-half;            render(left);            event.preventDefault();        })        range.addEventListener('touchmove',function (event) {            /*计算滑块的left距离*/            var left=event.touches[0].pageX-rangex-half;            render(left);        });        range.addEventListener('touchstart',function (event) {            var left=event.touches[0].pageX-rangex-half;            render(left);        })        //显示位置        function render(value) {            var left=value;            /*判断left距离不能小于0并且不能大于最大宽度*/            if(left<=0){                left=0;            }            if(left>=maxw){                left=maxw;            }            /*显示滑块的位置、进度条的长度、进度值*/            bar.style.left=left+'px';            progress.style.width=left+'px';            text.innerText=Math.ceil(left/maxw*100)+'%';        }        function $(s) {            return document.querySelector(s)        }

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

你可能感兴趣的文章
Python 中的tab补全
查看>>
春运火车票今日开售, python让你抢票快人一步
查看>>
server总结-写在前面的话
查看>>
VMware 5.2 测试环境实施一 环境介绍
查看>>
EF AutoMaper
查看>>
js 设置url参数--转
查看>>
优化网站设计(十一):避免重定向
查看>>
ID--HANDLE--HWND三者之间的互相转换(转)
查看>>
[LeetCode]3. Longest Substring Without Repeating Characters无重复字符的最长子串
查看>>
mysql之 xtrabackup-2.4.12 安装
查看>>
Read ALAsset movie file and write into the disk
查看>>
Rabbitmq实现负载均衡与消息持久化
查看>>
[C++/Python] 如何在Python中使用一个DLL? (Windows环境)
查看>>
c实现的trim函数
查看>>
如何提高数据库查询效率
查看>>
java--xml文件读取(DOM)
查看>>
Bootstrap-表单
查看>>
hiveserver2连接报错: User: root is not allowed to impersonate anonymous (state=08S01,code=0)
查看>>
android:使用Messenger进行进程间通信(一)
查看>>
HDU(1016),打素数环
查看>>