一、移动端默认样式

·IOS和Android下触摸元素时出现半透明灰色遮罩

a,input,button{
-webkit-tap-highlight-color: transparent;
}

·IOS按钮圆角的问题 

button,input{
border-radius:;
-webkit-appearance: none;
}

·上下拉动滚动条时卡顿、慢 

body {
-webkit-overflow-scrolling: touch;
overflow-scrolling: touch;
}

·禁止复制、选中文本 

*{
-webkit-user-select: none;
-moz-user-select: none;
-khtml-user-select: none;
user-select: none;
}

·旋转屏幕时,字体大小调整的问题

html, body, form, fieldset, p, div, h1, h2, h3, h4, h5, h6 {
-webkit-text-size-adjust:100%;
}

二、移动端事件

2.1 基本使用

PC端事件仍然可以在移动端使用不过会存在一些问题,一会我们来阐述。

那么移动端也有移动端专有的事件。

touchstart:当用户手指触摸到的触摸屏的时候触发。事件对象的 target 就是touch 发生位置的那个元素。

touchmove:当用户在触摸屏上移动触点(手指)的时候,触发这个事件。一定是先要触发touchstart事件,再有可能触发 touchmove 事件。

touchend:当用户的手指抬起的时候,会触发 touchend 事件。如何用户的手指从触屏设备的边缘移出了触屏设备,也会触发 touchend 事件。

touchcancel:一般用于保存现场数据。比如:正在玩游戏,如果发生了 touchcancel 事件,则应该把游戏当前状态相关的一些数据保存起来。

基本语法:

<div></div>
<script type="text/javascript">
var oDiv = document.getElementsByTagName("div")[0];
//DOM0级事件-时好时坏
oDiv.ontouchend = function(){
this.innerText += "手抬起"
} //DOM2级事件
//oDiv.addEventListener(事件名称(不加on),事件处理函数,是否捕获) oDiv.addEventListener("touchstart",function(){
this.innerHTML += "DOM2级<br/>"
},false)
</script>

2.2 事件对象

当给某个元素加上了事件绑定函数之后,事件函数默认的第一个参数就是事件对象。

事件对象:当用户在浏览器下触发了某个行为,事件对象会记录用户操作时一些细节信息。

注意:touchstart和touchmove事件中的event事件对象中有一个属性是touches是数组,里面封装了每个手指的信息,包括手指的位置、手指的粗细、手指力度(iPhone6s以上提供),都有以下截图数据:

web页面基本上都是1个手指,和app不一样。web页面一般没有捏合、旋转操作。都是一根手指。

event.touches[0]

1 touches         表示当前跟踪的触摸操作的touch对象的数组

2 targetTouches   特定于事件目标的touch对象数组

3 changeTouches   表示自上次触摸以来发生了什么改变的touch对象数组

touchend事件比较特殊,离开的时候能获取到最终的信息。

touches属性是一个数组,它表示是现在仍然在屏幕上的手指

changedTouches属性也数组,表示离开的手指信息,离开时会被push进入数组,并且保留最终的信息。


2.3touch对象详解之位置尺寸

每个touch对象包含的属性如下:

1 clientX:触摸目标在视口中的x坐标。

2 clientY:触摸目标在视口中的y坐标。

3 pageX:触摸目标在页面中的x坐标。

4 pageY:触摸目标在页面中的y坐标。

5 screenX:触摸目标在屏幕中的x坐标。

6 screenY:触摸目标在屏幕中的y坐标。

7 target:触目的DOM节点目标。

8 identifier:标识触摸的唯一ID。


2.4事件点透

2.4.1现象

移动端的点透:当上层元素发生点击的时候,下层元素也有点击(焦点)特性,在300ms之后,如果上层元素消失或者隐藏,目标点就会“漂移”到下层元素身上,就会触发点击行为。

<a href="http://baidu.com">百度一下</a>
<p>pc点击事件</p>
<div></div> <script type="text/javascript">
//pc端事件是可以在移动端使用的 但是存在一些问题(事件点透)-pc端事件比移动端事件慢300ms
var oDiv = document.getElementsByTagName("div")[0];
var oP = document.getElementsByTagName("p")[0]; oP.onclick = function(){
this.style.color = "orange";
} oDiv.addEventListener("touchend",function(){
this.style.display = "none";
},true);
</script>

如果我们在百度一下 pc点击事件上方进行点击会发现当红色区域隐藏后还会触发其自身的事件。

这种现象就是事件点透。


2.4.2 成因

我们上面说过,移动设备能够响应click事件,不过比较慢,这是为什么?

因为click事件触发之后,要等200ms到300ms左右,因为浏览器有一些默认的手指快捷操作,比如:快速双击两次屏幕视口会放大,弹出辅助菜单等等。

大家用手机上网的时候,尤其看一些PC端网站,双击屏幕,当前视口就变大了。

本质上:PC端事件比移动端的事件略慢,大概是在300ms左右。所以我们也称这种现象为300毫秒延迟。


2.4.3解决方案

下层不再使用具有点击特性的元素,获取取消具有点击特性元素的属性,并且使用移动端事件。

比如我们看移动端淘宝,他在导航区域就没有使用a标签而是全部使用div。

因为淘宝不再担心优化问题,而我们做网站时是特别看重优化问题的,所以我们不能全部使用div,那么我们的解决方案是:把a标签的href属性去掉,用一个自定义的属性来存储url,并且通过js进行事件触发动态跳转页面。

代码如下:

<nav>
<ul>
<li><a data-href="http://baidu.com">百度</a></li>
<li><a data-href="http://163.com">163</a></li>
<li><a data-href="http://qq.com">腾讯</a></li>
</ul>
<nav>
<script type="text/javascript">
var aS = document.querySelectorAll("a"); for(var i=0;i<aS.length;i++){
aS[i].addEventListener("touchstart",function(){
//页面跳转-window.location.href
//把被点击的a的自定义属性拿过来 然后复制就好
window.location.href = this.getAttribute("data-href");
},true)
}
</script>

三、惯性抛掷

拖拽后根本停不下来,有惯性,会慢慢停下来,有两种方法:

方法一: overflow:auto 很智能的把移动的内容就变成可以滑动、抛掷货惯性的了;

触摸的时候有颜色的变化:(iPhone和iPad)

-webkit-tap-highlight-color:#00FF3E;

nav{
width:100%;height:50px;padding:20px 0;
background:#FF6969;overflow:hidden; overflow-x:auto; 
}
nav ul{width:99999px; }
nav ul li{float:left;margin-right:10px;line-height:50px; }
<nav>
<ul>
<li>栏目栏目1</li>
<li>栏目栏目2</li>
<li>栏目栏目3</li>
...
</ul>
</nav>

方法二: swiper

<!DOCTYPE html>
<html lang="zh"> <head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Document</title>
<link rel="stylesheet" type="text/css" href="css/swiper.css"/>
<style type="text/css">
*{
margin: 0;
padding: 0;
list-style: none;
}
nav{
background-image: linear-gradient(to right,#fff,deepskyblue,#fff);
}
li{
height: 40px;
line-height: 40px;
text-align: center;
}
</style>
</head> <body>
<nav class="swiper-container">
<ul class="swiper-wrapper">
<li class="swiper-slide">首页</li>
<li class="swiper-slide">国内</li>
<li class="swiper-slide">国际</li>
<li class="swiper-slide">军事</li>
<li class="swiper-slide">财经</li>
<li class="swiper-slide">娱乐</li>
<li class="swiper-slide">体育</li>
<li class="swiper-slide">互联网</li>
<li class="swiper-slide">科技</li>
<li class="swiper-slide">游戏</li>
<li class="swiper-slide">个性推荐</li>
<li class="swiper-slide">女人</li>
<li class="swiper-slide">汽车</li>
<li class="swiper-slide">房产</li>
</ul>
<div class="swiper-scrollbar"></div>
</nav> <script src="js/swiper.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
new Swiper(".swiper-container",{
//具体的配置项
slidesPerView: 5,
scrollbar: {
el: '.swiper-scrollbar',
dragSize: 50
},
})
</script>
</body> </html>

四、swiper

官网:http://www.swiper.com.cn/

开源(开放源码)=>代码健壮性

免费

布局可以自己写亦可以仿照他们的

使用:

1.首先加载插件,需要用到的文件有swiper.min.js和swiper.min.css文件。可下载Swiper文件或使用CDN。

<!DOCTYPE html>
<html>
<head>
...
<link rel="stylesheet" href="path/to/swiper.min.css">
</head>
<body>
...
<script src="path/to/swiper.min.js"></script>
</body>
</html>

2.HTML内容。

<div class="swiper-container">
<!--轮播图-->
<div class="swiper-wrapper">
<div class="swiper-slide">Slide 1</div>
<div class="swiper-slide">Slide 2</div>
<div class="swiper-slide">Slide 3</div>
</div>
<!-- 下面的点点点 -->
<div class="swiper-pagination"></div> <!-- 左右按钮 -->
<div class="swiper-button-prev"></div>
<div class="swiper-button-next"></div> <!-- 如果需要滚动条 -->
<div class="swiper-scrollbar"></div>
</div>
导航等组件可以放在container之外

3.初始化Swiper:最好是挨着</body>标签

<script>
var mySwiper = new Swiper ('.swiper-container/选择器', {
direction: 'vertical',/*水平or垂直*/
loop: true,/*无缝轮播*/ // 如果需要分页器
pagination: {
el: '.swiper-pagination',
}, // 如果需要前进后退按钮
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
}, // 如果需要滚动条
scrollbar: {
el: '.swiper-scrollbar',
},
})
</script>

五、BOM之hash、search

5.1 认识location对象

hash:#后面的我们称之为hash

Host:主机

Hostname:主机名

Href:地址

Port:端口号

Search:?后面的我们称之为search|他会刷新网页


前端笔记之移动端&响应式(下)默认样式&事件&惯性抛掷&swiper&loaction对象的更多相关文章

  1. 前端笔记之移动端&响应式(上)媒体查询&Bootstrap&动画库&zepto&velocity

    一.媒体(介)查询 1.1 基本语法 媒体查询由媒体类型和一个或多个检测媒体特性的条件表达式组成.媒体查询中可用于检测的媒体特性有:width.height和color(等).使用媒体查询可以在不改变 ...

  2. 前端笔记之移动端&响应式(中)视口&百分比布局&弹性盒模型&rem&fillpage

    一.viewport视口 1.1什么是屏幕尺寸.屏幕分辨率.屏幕像素密度? 屏幕尺寸:指屏幕的对角线的长度,单位是英寸,常见的屏幕尺寸有3.5.3.7.4.2.4.7.5.0.5.5.6.0等. 屏幕 ...

  3. 前端笔记之ES678&Webpack&Babel(下)AMD|CMD规范&模块&webpack&Promise对象&Generator函数

    一.AMD和CMD规范(了解) 1.1传统的前端开发多个js文件的关系 yuan.js中定义了一个函数 function mianji(r){ return 3.14 * r * r } main.j ...

  4. 移动端响应式布局--你不知道的CSS3.0媒体查询,解决rem部分情况下无法适配的场景

    媒体查询作为响应式布局的方法之一,实际项目中用途也很广.但是你真的知道怎么用吗? 例如,下面匹配 iphone6/7/8 屏幕 @media screen and (max-width: 375px) ...

  5. 基于REM的移动端响应式适配方案

    视口 在前一段时间,我曾经写过一篇关于viewport的文章.最近由于在接触移动端开发,对viewport有了新的理解.于是,打算重新写一篇文章,介绍移动端视口的相关概念. 关于这篇文章说到的所有知识 ...

  6. 探讨兼容IE低版本的PC端响应式布局

    http://www.jiangweishan.com/article/lowIeResposive.html 响应式布局,oh my god!!有点醉了,感觉是老生常谈的话题了.虽然已经谈过很多了, ...

  7. Mega Dropdown - 带子分类的响应式下拉菜单

    当你在开发一个内容很多的 Web 项目的时候,最具挑战性的部分之一是为了如果更方便用户浏览这些内容.我们都能想到的一个例子是 Amazon,无限的类别以及它们的子类别.Mega Dropdown 是带 ...

  8. 响应式下的雪碧图解决方案 - 活用background-size / background-position

    一.概述 在传统的居中布局时,我们常用background-position这个属性来进行雪碧图的定位,在减少数据量的同时,保证准确定位.在移动端使用越来越重的现在,以往的传统定位,已经无法达到目的, ...

  9. 【CSS-移动端响应式布局详解】

    背景 移动端响应式布局开发主要方案有: 基于rem开发 基于媒体查询 基于弹性盒 基础概念 在讨论响应式布局知识前,先了解下移动端常用基础概念. 逻辑像素(CSS pixels) 浏览器使用的抽象单位 ...

随机推荐

  1. 【bzoj 4173】数学

    Description Input 输入文件的第一行输入两个正整数 . Output 如题 Sample Input 5 6 Sample Output 240 HINT N,M<=10^15 ...

  2. ELK---日志分析系统

    ELK就是一套完整的日志分析系统 ELK=Logstash+Elasticsearch+Kibana 统一官网https://www.elastic.co/products ELK模块说明 Logst ...

  3. Python多版本管理-pyenv

    经常遇到这样的情况: 系统自带的Python是2.x,自己需要Python 3.x,此时需要在系统中安装多个Python,但又不能影响系统自带的Python,即需要实现Python的多版本共存,pye ...

  4. MediatR 知多少

    引言 首先不用查字典了,词典查无此词.猜测是作者笔误将Mediator写成MediatR了.废话少说,转入正题. 先来简单了解下这个开源项目MediatR(作者Jimmy Bogard,也是开源项目A ...

  5. 响应式WEB设计的基本原则大总结

    响 应式Web设计对于解决多类型屏幕问题来说是个不错方案,但从印刷的角度来看,其却存在着很多的困难.没有固定的页面尺寸.没有毫米或英寸,没有任何物理 限制,让人感到无从下手.随着建立网站可用的各种小工 ...

  6. 描述性统计指标 - 众数 Mode

    定义- 数值型数据 - 出现频数最多的变量值- 品质型数据.单项式分组数据 - 频数最多的组为众数组,该组的变量值(类型)就是众数- 组距式分组数据 - 频数最多的组为众数组,通过公式求得众数 - 公 ...

  7. 补习系列(16)-springboot mongodb 数据库应用技巧

    目录 一.关于 MongoDB 二.Spring-Data-Mongo 三.整合 MongoDB CRUD A. 引入框架 B. 数据库配置 C. 数据模型 D. 数据操作 E. 自定义操作 四.高级 ...

  8. 《Jave并发编程的艺术》学习笔记(1-2章)

    Jave并发的艺术 并发编程的挑战 上下文切换 CPU通过时间片分配算法来循环执行任务,当前时间片执行完之后会切换到下一个任务.但是,切换会保存上一个任务的状态,一遍下次切换回这个任务时,可以再次加载 ...

  9. 03. Redis-配置文件

    redis-3.2.6配置文件 主要修改配置文件几个大方面: 端口 port 安全: bind ip 绑定监听IP 安全模式开启与否 protected-mode 一般设置yes 访问密码 requi ...

  10. Mapbox使用详解

    一.简介: Mapbox致力于打造全球最漂亮的个性化地图.   在一次偶然的地图相关资料搜索过程中发现了一个很神奇又很漂亮的地图,这个地图支持高度自定义各种地图元素,比如,道路,水系,绿地,建筑物,背 ...