有了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、nearList
function 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、moveTo
function 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

效果图:

基于webview的选择滑动控件(PC和wap版)的更多相关文章

  1. [转] 基于C#的波形显示控件的实现

    转自 基于C#的波形显示控件的实现[附完整源码下载] 编者记: 09年暑假正好在学院实验室呆了一段时间,做了个完整的上位机软件(具体实现:根据下位机的指令,实现通过串口来操纵下位机进行实验,并将采集的 ...

  2. 基于C#的波形显示控件的实现[转]

    编者记: 09年暑假正好在学院实验室呆了一段时间,做了个完整的上位机软件(具体实现:根据下位机的指令,实现通过串口来操纵下位机进行实验,并将采集的数据进行处理和保存,并以图形的方式显示),整个项目边学 ...

  3. 基于AngularJs的上传控件-angular-file-upload

    今天跟大家分享的是一个依赖于angular的上传控件. 前段时间做项目遇到一个需求是上传文件,大概需要实现的样式是这样子的,见下图: 需要同时上传两个文件.并且规定文件格式和文件大小.因为前端框架使用 ...

  4. appium+python:自己写的一个滑动控件的方式

    #调用方式roll_ele("ID","ele_id","7","up",3)#将控件分为7格,从底部倒数第二格向上滑动 ...

  5. VC 透明滑动控件Slider Control

    操作系统:Windows 7软件环境:Visual C++ 2008 SP1本次目的:为滑动控件设置背景透明 经常在编写有背景的程序时,滑动控件Slider Control看起来与背景十分不合,我们可 ...

  6. Android进阶篇-时间滑动控件

    仿Iphone时间选择滑动控件: WheelView.java: /** * @author Administrator * * 时间滑动滚轮 */ public class WheelView ex ...

  7. Flex自定义组件开发之日周月日期选择日历控件

    原文:Flex自定义组件开发之日周月日期选择日历控件         使用过DateField的我们都知道,DateField 控件是用于显示日期的文本字段,字段右侧带有日历图标.当用户在控件边框内的 ...

  8. jqGrid选择列控件向右拖拽超出边界处理

    jqGrid选择列控件向右拖拽超出边界处理 $("#tb_DeviceInfo").jqGrid('navButtonAdd', '#jqGridPager', {         ...

  9. WPF自定义选择年月控件详解

    本文实例为大家分享了WPF自定义选择年月控件的具体代码,供大家参考,具体内容如下 封装了一个选择年月的控件,XAML代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...

随机推荐

  1. .Net 垃圾回收和大对象处理 内存碎片整理

    CLR垃圾回收器根据所占空间大小划分对象.大对象和小对象的处理方式有很大区别.比如内存碎片整理 —— 在内存中移动大对象的成本是昂贵的,让我们研究一下垃圾回收器是如何处理大对象的,大对象对程序性能有哪 ...

  2. 用DELPHI 开发压缩、解压、自解压、加密

    引 言:在日常中,我们一定使用过WINZIP.WINRAR这样的出名的压缩软件,就是我们开发软件过程中不免要遇到数据加密.数据压缩的问题!本文中就这一技术问题展开探讨,同时感谢各位网友的技巧,在我每次 ...

  3. MySQL对数据表进行分组查询

    MySQL对数据表进行分组查询(GROUP BY) GROUP BY关键字可以将查询结果按照某个字段或多个字段进行分组.字段中值相等的为一组.基本的语法格式如下: GROUP BY 属性名 [HAVI ...

  4. C语言控制结构

    C语言流程控制 一.流程控制结构 (1)顺序结构:按书写顺序执行每一条语句. (2)选择结构:对给定的条件进行判断,根据判断结果决定执行哪一段代码. (3)循环结构:在给定条件成立的情况下,反复执行某 ...

  5. Scrollbar中滚动条的设置

      insideOverlay 默认值,表示在padding区域内并且覆盖在view上 insideInset 表示在padding区域内并且插入在view后面 outsideOverlay 表示在p ...

  6. C# Linq获取两个List或数组的差集交集

      List<); list1.Add(); list1.Add(); List<); list2.Add(); list2.Add(); //得到的结果是4,5 即减去了相同的元素. L ...

  7. Kubernetes 存储系统 Storage 介绍

    本文环境为Kubernetes V1.11,操作系统版本为 CentOs 7.3,Kubernetes集群安装可以参考 kubeadm安装kubernetes V1.11.1 集群 容器中的存储都是临 ...

  8. opengl 教程(24) shadow mapping (2)

    原帖地址:http://ogldev.atspace.co.uk/www/tutorial24/tutorial24.html 本篇教程中,我们通过shadowmap来实现阴影渲染. 我们知道shad ...

  9. B样条

    在数学的子学科数值分析里,B-样条是样条曲线一种特殊的表示形式.它是B-样条基曲线的线性组合.B-样条是贝兹(贝塞尔)曲线的一种一般化,可以进一步推广为非均匀有理B样条(NURBS),使得我们能给更多 ...

  10. 测试 Java 类的非公有成员变量和方法

    引言 对于软件开发人员来说,单元测试是一项必不可少的工作.它既可以验证程序的有效性,又可以在程序出现 BUG 的时候,帮助开发人员快速的定位问题所在.但是,在写单元测试的过程中,开发人员经常要访问类的 ...