无线web开发之前要做一些准备工作:
一、必需的reset样式库
1、其中的重点是盒模型box-sizing:由原来pc端的content-box改为border-box。

  1. *, *:before, *:after {
  2. -webkit-box-sizing: border-box;
  3. -moz-box-sizing: border-box;
  4. box-sizing: border-box;
  5. }

2、设定root元素的字体大小,便于子元素rem单位的设置。

  1. html { font-size: 100%; }

3、使Chrome使用小于12px的字体。

  1. *, *:before, *:after {
  2. -webkit-text-size-adjust: 100%;
  3. -ms-text-size-adjust: 100%;
  4. text-size-adjust: 100%;
  5. }

4、去除点击元素后的高亮效果。

  1. *, *:before, *:after {
  2. -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
  3. }

5、去除焦点元素周围的虚线。

  1. *:focus {
  2. outline: none;
  3. }

6、其余样式reset等同pc端的样式reset。

  1. h1, h2, h3, h4, h5, h6 {
  2. font-size: 100%;
  3. font-weight: normal;
  4. }
  5. /* 消除图片下方3像素空白 */
  6. img {
  7. display: block;
  8. }
  9. /* 重置默认字体和大小 */
  10. body {
  11. font-size: 0.75rem;
  12. line-height: 1.5;
  13. }
二、必需的js基础库
基于学习成本以及性能方面考虑,我选择的是jQuery2.0以上版本的库文件 jquery-2.1.1.min.js。
三、touch事件的掌握

touchstart:当手指触摸屏幕时触发;即使已经有一个手指放在了屏幕上也会触发。
touchmove:当手指在屏幕上滑动时连续地触发。在这个事件发生期间,调用preventDefault()可以阻止滚动。
touchend:当手指从屏幕上移开时触发。
上面这几个事件都会冒泡,也都可以取消。虽然这些触摸事件没有在DOM规范中定义,但它们却是以兼容DOM的方式实现的。
因此,每个触摸事件的event对象都提供了在鼠标事件中常见的属性:bubbles、cancelable、view、clientX、clientY、screenX、screenY、detail、altKey、shiftKey、ctrlKey和metaKey。
除了常见的DOM属性外,触摸事件还包含下列三个用于跟踪触摸的属性。
originalEvent.touches:表示当前跟踪的触摸操作的Touch对象的数组。
originalEvent.targetTouchs:特定于事件目标的Touch对象的数组。
originalEvent.changeTouches:表示自上次触摸以来发生了什么改变的Touch对象的数组。
每个Touch对象包含下列属性。
clientX:触摸目标在视口中的x坐标。
clientY:触摸目标在视口中的y坐标。
identifier:标识触摸的唯一ID。
pageX:触摸目标在页面中的x坐标。
pageY:触摸目标在页面中的y坐标。
screenX:触摸目标在屏幕中的x坐标。
screenY:触摸目标在屏幕中的y坐标。
target:触摸的DOM节点目标。
注意,在touchend事件发生时,touches集合中就没有任何Touch对象了,因为不存在活动的触摸操作;此时,就必须转而使用changeTouchs集合。
也就是说:touchstart和touchmove事件只可以使用originalEvent.touches对象。touchend事件只可以使用originalEvent.changeTouches对象。
四、HTML5标签、CSS3
除了上面必需的基础,多多少少也要掌握一些HTML5、CSS3方面的知识,尤其是HTML5标签的使用、CSS3过渡(transition)、CSS3动画(@-webkit-keyframes)、CSS3 3D等。
这些知识可以让我们在做无线web开发时游刃有余。比如:有些动画效果使用css3完全可以胜任,而且与js实现相比性能更优。
下面是我写的一个滑动效果的js部分:

  1. ;(function($, wind, undefined) {
  2. //缓存全局变量
  3. var jwind = $(wind);
  4. var carouselEffect = {
  5. init: function() {
  6. //操作容器
  7. this.wrap = $('.list');
  8. this.ul = this.wrap.find('ul');
  9. //列表项内容宽度自适应
  10. this.styleInit();
  11. //事件绑定集
  12. this.event();
  13. },
  14. //列表项内容宽度自适应
  15. styleInit: function() {
  16. this.ul.each(function(i, el) {
  17. var ul = $(el), item = ul.find('li'), itemCount = item.length, itemWidth = jwind.width();
  18. //设置列表项父层容器的宽度
  19. ul.css('width', itemCount*itemWidth);
  20. //设置列表项内容的宽度
  21. item.css('width', itemWidth);
  22. });
  23. },
  24. //事件绑定集
  25. event: function() {
  26. var that = this;
  27. //窗口大小改变时列表项内容宽度自适应
  28. jwind.on('resize.th', function() {
  29. if (wind.timeid) clearTimeout(wind.timeid);
  30. wind.timeid = setTimeout($.proxy(that.styleInit, that), 1000/60);
  31. });
  32. //绑定触摸事件
  33. this.wrap.on('touchstart', 'li', touchstart);
  34. this.wrap.on('touchmove', 'li', touchmove);
  35. this.wrap.on('touchend', 'li', touchend);
  36. }
  37. };
  38. $(function() {
  39. carouselEffect.init();
  40. })
  41. //预定义常用的变量
  42. var touch, startx, cachex, cacheulx, ul, ulx, endx, diffx;
  43. //触摸开始
  44. function touchstart(ev) {
  45. touch = ev.originalEvent.touches[0];
  46. cachex = startx = touch.clientX;
  47. cacheulx = parseInt($(this).parent('ul').css('margin-left'));
  48. }
  49. //触摸移动
  50. function touchmove(ev) {
  51. //阻止浏览器的默认拖动行为
  52. ev.preventDefault();
  53. //计算移动距离
  54. touch = ev.originalEvent.touches[0];
  55. endx = touch.clientX;
  56. diffx = endx - startx;
  57. ulx = parseInt((ul=$(this).parent('ul')).css('margin-left'));
  58. startx = endx;
  59. //移动对象
  60. ul.css('margin-left', ulx+diffx);
  61. }
  62. //触摸结束
  63. function touchend(ev) {
  64. var resultx, boundvalue = 50, itemCount = (ul=$(this).parent('ul')).find('li').length, itemWidth = jwind.width();
  65. //手指抬起时横坐标
  66. endx = ev.originalEvent.changedTouches[0].clientX;
  67. //向左滑动
  68. if (cachex > endx) {
  69. //计算下一项的位置
  70. resultx = cacheulx % itemWidth === 0 ? cacheulx-itemWidth : itemWidth;
  71. resultx = resultx < -(itemCount-1)*itemWidth ? -(itemCount-1)*itemWidth : resultx;
  72. //滑动一定距离则切换到下一项
  73. if (cachex - endx > boundvalue) {
  74. ul.animate({'margin-left': resultx}, 'fast', function() {
  75. //滑动完毕读取的距离才可信
  76. cacheulx = parseInt(ul.css('margin-left'));
  77. });
  78. }
  79. //未滑动一定距离则返回到原来位置
  80. else {
  81. ul.animate({'margin-left': cacheulx}, 'fast', function() {
  82. //滑动完毕读取的距离才可信
  83. cacheulx = parseInt(ul.css('margin-left'));
  84. });
  85. }
  86. }
  87. //向右滑动
  88. else {
  89. //计算下一项的位置
  90. resultx = cacheulx % itemWidth === 0 ? cacheulx+itemWidth : itemWidth;
  91. resultx = resultx > 0  ? 0 : resultx;
  92. //滑动一定距离则切换到下一项
  93. if (endx - cachex > boundvalue) {
  94. ul.animate({'margin-left': resultx}, 'fast', function() {
  95. //滑动完毕读取的距离才可信
  96. cacheulx = parseInt(ul.css('margin-left'));
  97. });
  98. }
  99. //未滑动一定距离则返回到原来位置
  100. else {
  101. ul.animate({'margin-left': cacheulx}, 'fast', function() {
  102. //滑动完毕读取的距离才可信
  103. cacheulx = parseInt(ul.css('margin-left'));
  104. });
  105. }
  106. }
  107. }
  108. })(jQuery, window);

二维码访问:

效果图:

调试 http://www.wozhuye.com/index.php?m=content&c=index&a=show&catid=7&id=275

无线端web开发学习总结的更多相关文章

  1. 【前端】移动端Web开发学习笔记【2】 & flex布局

    上一篇:移动端Web开发学习笔记[1] meta标签 width设置的是layout viewport 的宽度 initial-scale=1.0 自带 width=device-width 最佳实践 ...

  2. 【前端】移动端Web开发学习笔记【1】

    下一篇:移动端Web开发学习笔记[2] Part 1: 两篇重要的博客 有两篇翻译过来的博客值得一看: 两个viewport的故事(第一部分) 两个viewport的故事(第二部分) 这两篇博客探讨了 ...

  3. 移动端 Web 开发前端知识整理

    文章来源: http://www.restran.net/2015/05/14/mobile-web-front-end-collections/ 最近整理的移动端 Web 开发前端知识,不定期更新. ...

  4. 安卓手机移动端Web开发调试之Chrome远程调试(Remote Debugging)

    一.让安卓打debug模式的apk包 二.将电脑中的chrome升级到最新版本,在chrome浏览器地址栏中输入chrome://inspect/#devices: 在智能手机还未普及时,移动设备的调 ...

  5. 手摸手带你学移动端WEB开发

    HTML常用标签总结 手摸手带你学CSS HTML5与CSS3知识点总结 手摸手带你学移动端WEB开发 好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/Ro ...

  6. 移动端web开发的一些知识点

    整理一下自己平时移动端web开发中遇到的问题,也参考一下前辈的一些总结 1.最常见的要数1像素边框了 因为Retine屏的分辨率始终是普通屏幕的2倍,1px的边框在dpr=2的retina屏下会显示成 ...

  7. 移动端web开发基础概念

    最近在了解移动端web开发的相关知识,有些概念总是模糊不清,这次花费了一些时间整体的梳理了一遍. 分辨率 分辨率可以从显示分辨率与图像分辨率两个方向来分类.显示分辨率(屏幕分辨率)是屏幕图像的精密度, ...

  8. 移动端Web开发注意点

    不用考虑浏览器兼容性 移动端开发主要对象是手持设备,其中绝大部分是IOS和Android系统,so,在开发此类页面时不必纠结IE和其他一些2B浏览器的兼容性,webkit是本次开发重点. 当然,不同版 ...

  9. 移动端Web开发如何处理横竖屏

    <!Doctype html> <html> <head> <meta charset="utf-8"> <meta id=& ...

随机推荐

  1. 运行.class文件提示找不到或者无法加载主类原因

    在Java初学之时,用文本文件写了一个“hello world”的简单程序.在dos环境下使用命令javac -test1.java 进行编译. 编译出名称为test1.class的Java运行文件. ...

  2. [学习笔记]设计模式之Singleton

    写在前面 为方便读者,本文已添加至索引: 设计模式 魔法手札索引 在前几篇笔记中,我们有了解了部分对象创建型模式,包括Builder(建造者).Abstract Factory(抽象工厂)和Facto ...

  3. oracle Imp和exp以及导入常见的错误

    一 1) 数据库对象已经存在 一般情况, 导入数据前应该彻底删除目标数据下的表, 序列, 函数/过程,触发器等; 数据库对象已经存在, 按缺省的imp参数, 则会导入失败 如果用了参数ignore=y ...

  4. mysql添加用户权限

    MySQL性能调优my.cnf详解 //登录MYSQLmysql -u root -p//创建用户insert into mysql.user(Host,User,Password) values(‘ ...

  5. HTML5 API 浏览器支持情况检测

    HTML5发展到现在,虽说没有大规模的普及,但在我们日常生活中,也很容易见到了,HTML5的游戏.网站.应用也是层出不穷.而作为前端人员,也应该多了解这些API为以后应用打基础,下面我将给大家介绍 H ...

  6. 利用URL重写实现参数目录化

    参数目录化,就是将 类似 http://www.abc.com/store/store.aspx?id=1024 这样的网址,对外改为 http://www.abc.com/1024. 要实现这种功能 ...

  7. Notification与多线程

    来源:南峰子(@南峰子_老驴 ) 链接:http://t.cn/R5swQcR 前几天与同事讨论到Notification在多线程下的转发问题,所以就此整理一下. 先来看看官方的文档,是这样写的: I ...

  8. WebService学习笔记系列(二)

    soap(简单对象访问协议),它是在http基础之上传递xml格式数据的协议.soap协议分为两个版本,soap1.1和soap1.2. 在学习webservice时我们有一个必备工具叫做tcpmon ...

  9. IT技能栈

    C++.JAVA.Objective-C 基本数据类型,集合类如字符串数组字典,自定义数据对象 内存布局,编译运行期的变化 语言特性 输入输出流,文件流,序列化 多线程,并发控制,线程池,锁 网络编程 ...

  10. centos7安装chrome的历程(fedora同)

    安装 首先是下载,地址奉上:http://www.google.cn/chrome/browser/desktop/index.html,选择64 bit .rpm (适用于 Fedora/openS ...