无线端web开发学习总结
无线web开发之前要做一些准备工作:
一、必需的reset样式库
1、其中的重点是盒模型box-sizing:由原来pc端的content-box改为border-box。
- *, *:before, *:after {
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- }
2、设定root元素的字体大小,便于子元素rem单位的设置。
- html { font-size: 100%; }
3、使Chrome使用小于12px的字体。
- *, *:before, *:after {
- -webkit-text-size-adjust: 100%;
- -ms-text-size-adjust: 100%;
- text-size-adjust: 100%;
- }
4、去除点击元素后的高亮效果。
- *, *:before, *:after {
- -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
- }
5、去除焦点元素周围的虚线。
- *:focus {
- outline: none;
- }
6、其余样式reset等同pc端的样式reset。
- h1, h2, h3, h4, h5, h6 {
- font-size: 100%;
- font-weight: normal;
- }
- /* 消除图片下方3像素空白 */
- img {
- display: block;
- }
- /* 重置默认字体和大小 */
- body {
- font-size: 0.75rem;
- line-height: 1.5;
- }
基于学习成本以及性能方面考虑,我选择的是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部分:
- ;(function($, wind, undefined) {
- //缓存全局变量
- var jwind = $(wind);
- var carouselEffect = {
- init: function() {
- //操作容器
- this.wrap = $('.list');
- this.ul = this.wrap.find('ul');
- //列表项内容宽度自适应
- this.styleInit();
- //事件绑定集
- this.event();
- },
- //列表项内容宽度自适应
- styleInit: function() {
- this.ul.each(function(i, el) {
- var ul = $(el), item = ul.find('li'), itemCount = item.length, itemWidth = jwind.width();
- //设置列表项父层容器的宽度
- ul.css('width', itemCount*itemWidth);
- //设置列表项内容的宽度
- item.css('width', itemWidth);
- });
- },
- //事件绑定集
- event: function() {
- var that = this;
- //窗口大小改变时列表项内容宽度自适应
- jwind.on('resize.th', function() {
- if (wind.timeid) clearTimeout(wind.timeid);
- wind.timeid = setTimeout($.proxy(that.styleInit, that), 1000/60);
- });
- //绑定触摸事件
- this.wrap.on('touchstart', 'li', touchstart);
- this.wrap.on('touchmove', 'li', touchmove);
- this.wrap.on('touchend', 'li', touchend);
- }
- };
- $(function() {
- carouselEffect.init();
- })
- //预定义常用的变量
- var touch, startx, cachex, cacheulx, ul, ulx, endx, diffx;
- //触摸开始
- function touchstart(ev) {
- touch = ev.originalEvent.touches[0];
- cachex = startx = touch.clientX;
- cacheulx = parseInt($(this).parent('ul').css('margin-left'));
- }
- //触摸移动
- function touchmove(ev) {
- //阻止浏览器的默认拖动行为
- ev.preventDefault();
- //计算移动距离
- touch = ev.originalEvent.touches[0];
- endx = touch.clientX;
- diffx = endx - startx;
- ulx = parseInt((ul=$(this).parent('ul')).css('margin-left'));
- startx = endx;
- //移动对象
- ul.css('margin-left', ulx+diffx);
- }
- //触摸结束
- function touchend(ev) {
- var resultx, boundvalue = 50, itemCount = (ul=$(this).parent('ul')).find('li').length, itemWidth = jwind.width();
- //手指抬起时横坐标
- endx = ev.originalEvent.changedTouches[0].clientX;
- //向左滑动
- if (cachex > endx) {
- //计算下一项的位置
- resultx = cacheulx % itemWidth === 0 ? cacheulx-itemWidth : itemWidth;
- resultx = resultx < -(itemCount-1)*itemWidth ? -(itemCount-1)*itemWidth : resultx;
- //滑动一定距离则切换到下一项
- if (cachex - endx > boundvalue) {
- ul.animate({'margin-left': resultx}, 'fast', function() {
- //滑动完毕读取的距离才可信
- cacheulx = parseInt(ul.css('margin-left'));
- });
- }
- //未滑动一定距离则返回到原来位置
- else {
- ul.animate({'margin-left': cacheulx}, 'fast', function() {
- //滑动完毕读取的距离才可信
- cacheulx = parseInt(ul.css('margin-left'));
- });
- }
- }
- //向右滑动
- else {
- //计算下一项的位置
- resultx = cacheulx % itemWidth === 0 ? cacheulx+itemWidth : itemWidth;
- resultx = resultx > 0 ? 0 : resultx;
- //滑动一定距离则切换到下一项
- if (endx - cachex > boundvalue) {
- ul.animate({'margin-left': resultx}, 'fast', function() {
- //滑动完毕读取的距离才可信
- cacheulx = parseInt(ul.css('margin-left'));
- });
- }
- //未滑动一定距离则返回到原来位置
- else {
- ul.animate({'margin-left': cacheulx}, 'fast', function() {
- //滑动完毕读取的距离才可信
- cacheulx = parseInt(ul.css('margin-left'));
- });
- }
- }
- }
- })(jQuery, window);
二维码访问:
效果图:
调试 http://www.wozhuye.com/index.php?m=content&c=index&a=show&catid=7&id=275
无线端web开发学习总结的更多相关文章
- 【前端】移动端Web开发学习笔记【2】 & flex布局
上一篇:移动端Web开发学习笔记[1] meta标签 width设置的是layout viewport 的宽度 initial-scale=1.0 自带 width=device-width 最佳实践 ...
- 【前端】移动端Web开发学习笔记【1】
下一篇:移动端Web开发学习笔记[2] Part 1: 两篇重要的博客 有两篇翻译过来的博客值得一看: 两个viewport的故事(第一部分) 两个viewport的故事(第二部分) 这两篇博客探讨了 ...
- 移动端 Web 开发前端知识整理
文章来源: http://www.restran.net/2015/05/14/mobile-web-front-end-collections/ 最近整理的移动端 Web 开发前端知识,不定期更新. ...
- 安卓手机移动端Web开发调试之Chrome远程调试(Remote Debugging)
一.让安卓打debug模式的apk包 二.将电脑中的chrome升级到最新版本,在chrome浏览器地址栏中输入chrome://inspect/#devices: 在智能手机还未普及时,移动设备的调 ...
- 手摸手带你学移动端WEB开发
HTML常用标签总结 手摸手带你学CSS HTML5与CSS3知识点总结 手摸手带你学移动端WEB开发 好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/Ro ...
- 移动端web开发的一些知识点
整理一下自己平时移动端web开发中遇到的问题,也参考一下前辈的一些总结 1.最常见的要数1像素边框了 因为Retine屏的分辨率始终是普通屏幕的2倍,1px的边框在dpr=2的retina屏下会显示成 ...
- 移动端web开发基础概念
最近在了解移动端web开发的相关知识,有些概念总是模糊不清,这次花费了一些时间整体的梳理了一遍. 分辨率 分辨率可以从显示分辨率与图像分辨率两个方向来分类.显示分辨率(屏幕分辨率)是屏幕图像的精密度, ...
- 移动端Web开发注意点
不用考虑浏览器兼容性 移动端开发主要对象是手持设备,其中绝大部分是IOS和Android系统,so,在开发此类页面时不必纠结IE和其他一些2B浏览器的兼容性,webkit是本次开发重点. 当然,不同版 ...
- 移动端Web开发如何处理横竖屏
<!Doctype html> <html> <head> <meta charset="utf-8"> <meta id=& ...
随机推荐
- 35个jquery技巧[转]
人人都会的35个Jquery小技巧 2015-10-28 WEB开发者 收集的35个 jQuery 小技巧/代码片段,可以帮你快速开发. 1. 禁止右键点击 $(document).ready(fun ...
- mongodb基本操作及存储图片显示方案
先介绍下mongodb的基本操作及使用 第一部:开启安全性验证 如果需要给MongoDB数据库使用安全验证,则需要用--auth开启安全性检查,则只有数据库认证的用户才能执行读写操作,开户安全性检查, ...
- SQL2008和SQL2000可以跨服务器连接查询的测试实例
测试目的: SQL2008 和 SQL2000 是否可以跨服务器连接查询 -- 测试环境: --A 虚拟机 XP ( IP : .0.0.213 )安装 SQL2000 个人版,并安装 SP4 补丁. ...
- 最简单的基于FFMPEG的视频编码器(YUV编码为H.264)
本文介绍一个最简单的基于FFMPEG的视频编码器.该编码器实现了YUV420P的像素数据编码为H.264的压缩编码数据.编码器代码十分简单,可是每一行代码都非常重要,适合好好研究一下.弄清楚了本代码也 ...
- 如何调试PHP的Core之获取基本信息 --------风雪之隅 PHP7核心开发者
http://www.laruence.com/2011/06/23/2057.html https://github.com/laruence PHP开发组成员, Zend兼职顾问, PHP7核心开 ...
- CGI与FastCGI 转
CGI与FastCGI 当我们在谈到cgi的时候,我们在讨论什么 最早的Web服务器简单地响应浏览器发来的HTTP请求,并将存储在服务器上的HTML文件返回给浏览器,也就是静态html.事物总是不 断 ...
- hdu2045java递推
不容易系列之(3)—— LELE的RPG难题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/O ...
- Android Studio使用SVN,与eclipse共同开发。
Android Studio(下称AS)开发工具目前已经迅速在世界普遍使用起来,而在很多一部分公司内部,仍然有部分老员工坚持使用eclipse + SVN,而不改用AS,这使得想使用AS的小伙伴们都深 ...
- XC通讯录
XC通讯录基于Android4.4开发的一个手机通讯录,具有手机拨号,添加联系人,查看联系人,管理编辑联系人,智能查找联系人,删除及批量删除,备份/还原数据,以及手机联系人导入等功能,界面简洁美观,欢 ...
- 【转】关于C#接口和抽象类的一些说明
接口和抽象类 1.概念 什么是接口? 接口是包含一组虚方法的抽象类型,其中每一种方法都有其名称.参数和返回值. 接口方法不能包含任何实现,CLR允许接口可以包含事件.属性.索引器. 一个类可以实现多个 ...