四月
01

TouchScroll 1.0 – 统一视觉样式的容器滚动解决方案

大概三个月之前,我发布了一个JS组件,《 TouchSlider 1.0 – 兼容触摸屏手机与PC的幻灯片 》。后来陆续在项目中都有用到,觉自己得还是很方便的。

今天,我又带来了自己空余时间写的另一个组件,TouchScroll。它最大程度上模拟了ios上的默认UI组件的滚动条效果。

为什么开发这个东西

其实很大一部分原因是自己想通过写这么一个东西来更好地熟悉PC和触屏手机的JS开发方案中的差别和特点。当然还有一个原因当然就是有可能项目中会用到这个,例如,在多栏功能页面中。

在页面上,一个容器如果内容的尺寸超过容器的大小,会自动出现滚动条,这个滚动条在不同浏览器中时各有差别的(windows 8上的IE的滚动条的metro风更是颠覆了IE多年的滚动条样式),并且自定义样式性也各不相同(如IE和chrome的通过css改变滚动条的方法就很不一样)或不可定义。而且,在IOS4上,出现滚动条的容器是不可被手指滚动浏览的(IOS5上的safair已经没有这个问题了),你一拖动页面,总是整个网页被拖动了。

而TouchScroll正是解决这个问题的,并且它在所有PC和手机浏览器上提供了统一的滚动条样式。PC上支持鼠标拖动页面浏览或者拖动滚轮来滚动容器,手机上支持手指滑动滚动容器。它也支持自适应大小的容器(目前有一些类似插件则是渲染出不可改变大小的容器)。TouchScroll压缩后只有8K。

TouchScroll开发注意的问题

首先是用不用css3,TouchScroll我前后开发了两版,第一版在支持css3的浏览器上,容器的移动以及缓动效果均有css3提供,在IE上则有JS动画提供缓动效果。这个版本遇到了一个我无法解决的问题(因为要兼容IE,所以我没用translate,而是普通的绝对定位absolute,这样子遇到了滚动条动画中时的位置定位问题,没找到解决办法),关于css3的,后来又由于各种原因,这个版本放弃了,又重新开发了目前这个版本。这个版本里的缓动效果是由JS支持的。

还遇到一个快速移动后的缓动问题,需要取一定时间内的移动距离以及时间来计算加速度并从而计算出缓动的距离以及开始的速度。最后我是在拖动过程中(moveEvent)记录了每一次的时间与坐标,然后在拖动结束时(endEvent),取最后不大于200ms内的时间和距离,从而以此推算出需要缓动的距离和速度。大概过程如下:

   1: var disc=[[/*时间*/],[/*坐标*/]]; //disc是用来保存时间与坐标的二维数组
   2: var getMousePoint=function(){....} //获取鼠标坐标
   3:  
   4: /* 每一次触发moveEvent时记录当前的时间与坐标 */
   5: moveEvent=function(){
   6:     ....
   7:     disc.push(new Date());
   8:     disc.push(getMousePoint());
   9:     ....
  10: }
  11:  
  12: endEvent=function(){
  13:     ....
  14:     //计算出最近不超过200豪秒内数据
  15:     var nowTime=new Date(),
  16:         nowPos=getMousePoint();
  17:     while(disc[0].length && nowTime-disc[0][0]>200){
  18:         disc[0].shift();
  19:         disc[1].shift();
  20:     }
  21:     if(disc[0].length){
  22:         time=nowTime-disc[0][0];//间隔时间
  23:          offX=nowPos.x-disc[0][1].x;//横向间隔距离
  24:           ...
  25:     }
  26:     ....
  27: }

TouchScroll如何使用

使用方法,载入TouchScroll的脚本文件,然后可以通过实例化“TouchScroll”这个类来使用。例如:

   1: new TouchScroll({
   2:     'id': 'slider',//要处理的容器的id
   3:     'width':4,//滚动条宽度
   4:     'minLength':20,//滚动条最小长度
   5:     'opacity':0.8,//滚动条透明度
   6:     'color':'black',//滚动条颜色
   7: });

TouchScroll还存在的问题

目前可能还存在一些bug,另外在滚动超出边界后的动画处理也不是很理想,过渡有点生硬。

目前TouchScroll也未提供一些操作接口,我会在日后慢慢完善,包括添加PC上的鼠标滚动支持(已添加)、更多自定义内容等。

目前可以使用的接口:

   1: var t1=new TouchScroll();
   2: /*容器滚动接口
   3:  *@param Number offx: 水平方向上滚动offx距离
   4:  *@param Number offy: 垂直方向上滚动offy距离
   5:  */
   6: t1.scroll(offx,offy);

查看DEMO请点击http://u.boy.im/touchscroll/。可以使用手机浏览器输入地址访问。

DEMO2: http://u.boy.im/touchscroll/scroll.html

查看源代码请点此处

touscroll

本文标签: , , ,

分享

本文短网址: http://qiqi.boy.im/fk

这篇文章已经有 19 条评论

Comments (19) Trackbacks (0)
You can leave a response or Trackback this entry .
  1. liuqiqi -#1

    美美的沙发。。。 :grin:

  2. emric -#2

    :mrgreen: 支持!

  3. leilei -#3

    :razz: :!:

  4. 刘印博客 -#4

    算是有心的一个东西了,很多时候都觉得会自动有~

  5. mopvhs -#5

    我在这里看到了Apps for the iPad的页面模板~~点此查看Demo地址

  6. 黑涩的猪 -#6

    这不是广告
    我有个VPS合租,不知博主愿不愿意参加
    每人每年100RMB,4G硬盘,200G流量,1GHZ CPU,512M内存
    如果有需要,联系 Q 826605134 注明VPS

  7. 普歌 -#7

    好像没有很大区别,是不是我的浏览器有问题呢。

  8. 宁波肛肠医院 -#8

    每天坚持更新博客还是很难得的,对于一些好的博文,
    我一般都是收藏的,在这里就先谢谢这些博主的无私分享了。

  9. 月月月 -#9

    大大大大大大

  10. RayRoad -#10

    我用火狐移动和UC浏览器测试了一下 这两个浏览器对该组件不支持

  11. sprityaoyao -#11

    是做移动开发的?

  12. www. -#12

    是做移动开发的?

  13. fugui -#13

    这是手机的?未来的主流啊

  14. 广州骨科 -#14

    我正找这个 就放出来了 很不错的

  15. geme_over -#15

    sinaapp上下载不了,求下载地址,email:z11750@gmail.com。 先谢了

  16. wiiking -#16

    为什么用新浪微博登录反映这么慢! 2.01放出来了?求下载地址亲!

  17. 睡眠博士旗舰店 -#17

    文章不错90524

  18. cheap nfl nike jerseys -#18

    我很想说的是这个留言做的太酷了。有点像明信片。

  1. No trackbacks yet.

Leave a Reply

Hi , say something.

  • :?:
  • :razz:
  • :sad:
  • :evil:
  • :!:
  • :smile:
  • :oops:
  • :grin:
  • :eek:
  • :shock:
  • :???:
  • :cool:
  • :lol:
  • :mad:
  • :twisted:
  • :roll:
  • :wink:
  • :idea:
  • :arrow:
  • :neutral:
  • :cry:
  • :mrgreen: