有了webview,大家开发ios或者安卓的app就方便很多啦。

第一可以增量更新;

第二webview可以同时兼容ios和安卓,减少开发量哦。

----------------------------------------------------

下面详细解说,一个webview的滑动控件是如何制作的。

----------------------------------------------------

效果说明:

1、页面展示效果为:

2、点击“距离”按钮,弹出“选择控件”

3、点击距离控件,或者拖动小圆点,都可以选择合适的距离哦。

展示地址:http://zhaoziang.com/uiweb/selcontrol/list.htm

-------------------------------------------------------------

一、功能点:

1、点击控件,让小圆点跳到正确位置

2、拖动小圆点,让其跟随,并停在正确的位置

二、设计思路:

设计三个函数,分别是:

1、获取dom元素的当前位置。getPosition(_dom)

2、根据当前位置x,判断小圆点悬停位置的一个附近列表,该控件有6个可以悬停的地方。nearList(x)

3、让小圆点跳到正确位置的动画效果。moveTo(start,end)

三、代码实现:

1、获取dom元素的当前位置。getPosition(_dom)

输入:传入参数,dom元素。先获取到dom元素。

    var _btn = document.getElementById("dragbtn");var _bar = document.getElementById("list_sel");

输出:该dom元素的位置。

tips:

1) 注意需要使用parseInt,将获取到的offsetLeft转换为数字。而在使用数字的时候,记得要加上+"px“,这样left属性才能正确识别哦。

2) 这里取元素的left值,使用dom.style.left,是取不到值的,应该使用offsetLeft。使用dom.style.left的场景,应该是left属性写在html里的,像这样<div style="left:10px"></div>

//1、getPosition(_dom)function getPosition(dom){_dom = dom;var _x = parseInt(_dom.offsetLeft);return _x + 18;}

2、根据当前位置x,判断小圆点悬停位置的一个附近列表,该控件有6个可以悬停的地方。nearList(x)

这里是,只需要修改起点_start ,和间隔_space。就能获得整个附近列表的设计。这样子不用每次都去修改N个地方的参数。

tips:

大于>,小于<,等于=,大于等于>=,小于等于<=都是二元操作符。所以在if判断的时候,如果有两个以上的判断时,使用与&&符号来连接。就像:1<x && x<9。而不是写成1<x<9,这样是无法识别的。

//2、nearListfunction nearList(x){var _movetox = 0;var _start = 78; //起点var _space = 56; //两点之间的间隔px        var _nearlist = [_start,_start+_space,_start+2*_space,_start+3*_space,_start+4*_space,_start+5*_space];var _x = x;                    if(_x<=_nearlist[0]){_movetox = _nearlist[0];}else if(_nearlist[0]<_x && _x<=_nearlist[0]+_space/2){_movetox = _nearlist[0];}else if(_nearlist[1]-_space/2<_x && _x<=_nearlist[1]+_space/2){_movetox = _nearlist[1];}else if(_nearlist[2]-_space/2<_x && _x<=_nearlist[2]+_space/2){_movetox = _nearlist[2];}else if(_nearlist[3]-_space/2<_x && _x<=_nearlist[3]+_space/2){_movetox = _nearlist[3];}else if(_nearlist[4]-_space/2<_x && _x<=_nearlist[4]+_space/2){_movetox = _nearlist[4];}else if(_nearlist[5]-_space/2<_x && _x<=_nearlist[5]+_space/2){_movetox = _nearlist[5];}else if(_x>_nearlist[5]){_movetox = _nearlist[5];}return _movetox;}

3、让小圆点跳到正确位置的动画效果。moveTo(start,end)

起点_startX是dom元素的位置,终点_endX是根据附近列表选择的。动画效果,使用延时来修改left的值。

tips:

这里获得的位置,都是数字。所以需要加上+"px"。

//3、moveTofunction moveTo(start,end){var _startX = getPosition(_btn);var _endX = nearList(end);_btn.style.left = _endX - 76 + "px";}

四、效果事件:

1、给控件bar添加点击事件,让小圆点跳到正确的地方:

//点击bar的事件_bar.onclick = function(e){moveTo(0,e.clientX);}

2、给小圆点添加拖拽事件。

drag事件,是用onmousedown,onmouseup,onmousemove三个事件,加上一个isdrag开关来实现的。

具体实现方式是:

开关先关掉isdrag=false;

当鼠标按下onmousedown,触发开关isdrag=true;

然后开始拖动onmousemove;

当鼠标松开onmouseup时,关掉开关isdrag=false。

//拖动btn的事件var _isdrag=false;var myX;var dobj;function movemouse(e){if (_isdrag){dobj.style.left = tx + e.clientX - myX + "px";return false;}}function moving(e){var fobj = event.srcElement;if (fobj.id=="dragbtn"){_isdrag = true;dobj = fobj;tx = parseInt(dobj.style.left+0);myX = e.clientX;document.onmousemove = movemouse;return false;}}document.onmousedown = moving;document.onmouseup = function(e){_isdrag = false;moveTo(0,e.clientX);}

--------------------------------------------------------

PC版:

DOM结构设计,CSS样式,以及全部源代码,请到展示地址查看:

http://zhaoziang.com/uiweb/selcontrol/list.htm

--------------------------------------------------------

wap版:

手机浏览器上(指ios和android机器)的触屏事件,与PC上的鼠标事件,有所对应,分别为:

ontouchstart == onmousedown

ontouchend == onmouseup

ontouchmove == onmousemove

获取元素位置的方法也有所不同:

e.touches[0].pageX == e.clientX

针对上述两个不同,对于wap端,做了改进。

详情请用手机浏览器访问:http://zhaoziang.com/uiweb/selcontrol/index.htm

效果图:

转载于:https://www.cnblogs.com/milkmap/p/3184921.html

基于webview的选择滑动控件(PC和wap版)相关推荐

  1. react结合antd的Cascader组件实现pc端选择城市控件

    react结合antd的Cascader组件实现pc端选择城市控件 业务需求,网上找了好多,发现都不太满意,于是自己写了一个 1.实现如下 提示: 数据地址点击 https://xf-12521862 ...

  2. jQuery:收集一些基于jQuery框架开发的控件/jquery插件2

    Horizontal accordion: jQuery 基于jQuery开发,非常简单的水平方向折叠控件. 主页:http://letmehaveblog.blogspot.com/2007/10/ ...

  3. [翻译]基于ASP.NET的NumericTextBox控件[Carol]

    原文地址:http://www.codeproject.com/useritems/ASPNET_NumericTextBox.asp demo下载 源码下载 基于ASP.NET的NumericTex ...

  4. 使用基于列表的表单控件

    使用基于列表的表单控件 我们可以在我们的Adobe Flex程序中使用基于表单控件,例如ComboBox,List,HorizontalList.在我们插入这种控件以后,我们必须为其提供要显示的项 目 ...

  5. 基于vue和ElementUI时间选择控件的封装

    基于vue和ElementUI时间选择控件的封装 最近有个需求就是需要把查询控制在最近六个月,还要要求时间的可选范围,在网上找了好久都没有找到,于是就自己动手写了一个,希望对大家有所帮助,也是记录自己 ...

  6. 基于VB算法+Picture+Timer控件制作的39种动画效果,类似屏保(完整原程序)

    基于VB算法+Picture+Timer控件制作的39种动画效果,类似屏保(完整原程序) 动画播放器程序,在WIN2003调试通过,详细请自行下载进行学习测试,程序大小13K 下载地址:http:// ...

  7. 基于VB算法+Picture+Timer控件制作的39种动画效果,类似屏保(完整原程序) (转)

    基于VB算法+Picture+Timer控件制作的39种动画效果,类似屏保(完整原程序) (转)[@more@] 基于VB算法+Picture+Timer控件制作的39种动画效果,类似屏保(完整原程序 ...

  8. Plotly绘制金融时间序列图实战:配置滑动控件

    Plotly绘制金融时间序列图实战:配置滑动控件 # 可视化金融时间序列数据并设置时间粒度组件: import plotly as py import plotly.graph_objs as go ...

  9. 确定多重选择列表控件 (List Control) 中的选定内容

    确定多重选择列表控件 (List Control) 中的选定内容 依次通过控件的 Items 集合,分别测试每一项的 Selected 属性. 下面的示例显示如何测试多重选择 ListBox 控件(名 ...

最新文章

  1. 项目创建venv、_都2020年了,居然还有人没有在数据科学项目中使用Docker?
  2. linux进程--多线程/多进程同步(十)
  3. oppo手机工程模式清除数据需要密码_手机隐藏的快捷键都有哪些?
  4. Warning: Received `false` for a non-boolean attribute `xxx`.
  5. bash脚本编程入门_Bash编程入门
  6. c语言 poll,c语言 linux 中 poll 的参数
  7. python连接数据库oracle_python 连接oracle数据库:cx_Oracle
  8. NSRunLoop中Autorelease pool 管理
  9. 【【henuacm2016级暑期训练】动态规划专题 D】Writing Code
  10. 25. 自定义Git
  11. iOS中书写代码规范35条小建议
  12. Disruptor学习笔记
  13. 关于计算机组件游戏,老司机带你解决游戏运行提示缺少组件问题
  14. MPEG-TS封装格式数据
  15. ElasticSearch分布式搜索引擎安装教程
  16. dat文件导入cad画图步骤_准确又高效的读入CAD几何——详解Fluent Meshing导入文件的几种方法...
  17. iSCSI Initiator命名规范
  18. android的apk加壳工具对比
  19. python3 简单选课系统
  20. C语言求1-1/2+1/3-1/4+...+1/99-1/100

热门文章

  1. java迷宫类编程题_第十届蓝桥杯省赛java类B组 试题 E:迷宫 (动态规划之回溯法)...
  2. idea上一步下一步快捷键_领航者的一步,左右行业的下一步!双11海尔洗衣机再夺冠的思考...
  3. postman请求参数区别
  4. sql server数据集中取第一条记录及保留几位小数的两种做法及前n行写法
  5. flink的operator state简单理解
  6. 全栈语音交互方案免费开放,这次扔开源炸弹的是Rokid
  7. JAVA程序设计:线程的概念
  8. PCDN实现flash无延时直播的技术原理与优点 1
  9. 深入浅出学Spring Data JPA
  10. 回溯法——求解N皇后问题