前端笔记之移动端&响应式(下)默认样式&事件&惯性抛掷&swiper&loaction对象

时间:2021-09-05 08:05:24

一、移动端默认样式

·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端事件仍然可以在移动端使用不过会存在一些问题,一会我们来阐述。

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

前端笔记之移动端&响应式(下)默认样式&事件&惯性抛掷&swiper&loaction对象

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以上提供),都有以下截图数据:

前端笔记之移动端&响应式(下)默认样式&事件&惯性抛掷&swiper&loaction对象

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>

前端笔记之移动端&响应式(下)默认样式&事件&惯性抛掷&swiper&loaction对象

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

这种现象就是事件点透。


2.4.2 成因

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

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

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

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


2.4.3解决方案

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

前端笔记之移动端&响应式(下)默认样式&事件&惯性抛掷&swiper&loaction对象

比如我们看移动端淘宝,他在导航区域就没有使用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 很智能的把移动的内容就变成可以滑动、抛掷货惯性的了;

前端笔记之移动端&响应式(下)默认样式&事件&惯性抛掷&swiper&loaction对象

触摸的时候有颜色的变化:(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对象

前端笔记之移动端&响应式(下)默认样式&事件&惯性抛掷&swiper&loaction对象

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

Host:主机

Hostname:主机名

Href:地址

Port:端口号

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


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

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

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

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

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

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

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

  4. 移动端响应式布局--你不知道的CSS3&period;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 &sol; background-position

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

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

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

随机推荐

  1. Linux下百度云盘报 获取bdstoken失败

    在用linux下百度云盘工具(bcloud),登录时,报获取bdstoken失败. 在网上搜了一下,解决办法如下. 找到auth.py文件 locate auth.py |grep bcloud 结果 ...

  2. 暗黑战神客户端&lpar;IOS和Android&rpar;打包教程

    先说下遇到的严重问题: 1.暗黑战神的资源管理有2套流程,一套开发使用(Resources.Load),一套正式上线使用(AssetBundles, 流畅),而走AssetBundles流程的代码则有 ...

  3. Android成长日记日记-Debug调试程序

    Debug调试程序: 1. 调试是程序员无法逃避的工作.调试方法有很多种,但归根结底,就是找到印发错误的代码 2. Debug调试可以快速准确的定位到错误问题的位置,以及它的调用关系 3. Debug ...

  4. PHP使用Xdebug进行远程调试

    PHP使用Xdebug进行远程调试 翻译 by mylxsw posted on 2014/07/14 under 技术文章 > 编程语言 Xdebug提供了客户端与PHP脚本进行交互的接口,这 ...

  5. 启动mongoDB 以及常用操作命令

    nonsql    关系数据库 集合  表 文档 行 启动mongoDB之前首先手动创建存放MongoDB数据文件的目录,如e:\mongo_data 执行命令  mongod --dbpath=e: ...

  6. 安卓WebView中接口隐患与手机挂马利用(远程命令执行)

    安卓应用存在安全漏洞,浏览网站打开链接即可中招.目前有白帽子提交漏洞表明目前安卓平台上的应用普遍存在一个安全漏洞,用户打开一个链接就可导致远程安装恶意应用甚至完全控制用户手机,目前微信,手机QQ,QV ...

  7. C&plus;&plus;匈牙利命名法

    匈牙利命名法 匈牙利命名法是一种编程时的命名规范.基本原则是:变量名=属性+类型+对象描述,其中每一对象的名称都要求有明确含义,可以取对象名字全称或名字的一部分.命名要基于容易记忆容易理解的原则.保证 ...

  8. String&lbrack;255&rsqb;在高版本Delphi里还是被解释成Byte,总体长度256,使用StrPCopy可以给Array String拷贝字符串(内含许多实验测试)

    学了好多不了解的知识: procedure TForm1.Button1Click(Sender: TObject); var s1 : String; s2 : String[]; begin s1 ...

  9. 【20190221】HTTP-URI与URL

    URI(uniform resource identifier)统一资源标识符是由某个协议方案表示的资源的定位标识符, URI 用字符串标识某一互联网资源,而 URL 表示资源的地点(互联网上所处的位 ...

  10. Unable to locate Spring NamespaceHandler for XML schema namespace

    1. 问题 本文将讨论Spring中最常见的配置问题 —— Spring的一个命名空间的名称空间处理程序没有找到. 大多数情况下,是由于一个特定的Spring的jar没有配置在classpath下,让 ...