移动端

适配方案

 网页宽度必须和浏览器保持一致 
 默认显示的缩放比例和PC端报错(缩放比例1.0) 
 不允许用户自行缩放页面 

适配设置

 如果任何设置都没有,默认走的就是viewport的默认设置 
 去设置新的viewport设置,达到适配要求 
 <meta name="viewport" /> 设置视口的标签 在head里面并且应该紧接着编码设置 

viewport的功能:

content中使用:

可以设置宽度 width:device-width 当前设备宽度
可以设置高度 height
可视设置默认的缩放比例 initial-scale
可以设置是否允许用户自行缩放 user-scalable (yes、no 1、0)
可以设置最大缩放比例 maximum-scale
可以设置最小缩放比例 minimum-scale

移动端触摸事件 touch

touchstart 当手指触摸屏幕的时候就触发
touchmove 当手指在屏幕中来回滑动的时候触发
touchend 当手指离开屏幕的时候触发
touchcancel 当被迫终止滑动的时候触发(如弹出消息、来电)

添加事件

element.addEventListener(“touchstart”, function(){},false);

事件对象

TouchList 触摸点(一个手指触摸就是一个触发点,和屏幕的接触点的个数)的集合
changedTouches 改变后的触摸点集合 每个事件都会记录
targetTouches 当前元素的触发点集合 在离开屏幕的时候无法记录触摸点
touches 页面上所有的触发点集合 在离开屏幕的时候无法记录触摸点

滑动实现的原理

1.就是让触摸的元素随着手指的滑动做位置的改变
2.位置的改变,需要当前手指的坐标
3.在每一个触摸点中会记录当前触摸点的坐标 e.touches[0]第一个触摸点
触摸点坐标
clientX clientY 基于浏览器窗口(基于视口)
pageX pageY 基于页面(视口)
screenX screenY 基于屏幕(包括浏览工具栏等)

轻触事件 tap

tap事件 轻触 响应快速
移动端也有click事件 但是移动端为了区分滑动还是点击,会在延迟后触发,看看你有没有滑动 (300ms)

响应式

css3中的Media Query (媒体查询)
通过查询screen的宽度
超小屏幕 768px以下
小屏设备 768px-922px
中等屏幕 922px-1200px
宽屏设备 1200px以上

@media screen and (min-width: 1200px) {}
@media screen and (min-width: 992px) and (max-width: 1200px) {}
@media screen and (min-width: 768px) and (max-width: 992px) {}
@media screen and (max-width: 768px) {}

下面我自己封装了一个侧边栏的划动

// 移动端侧边栏滑动
// 这里我设置了两个参数 :一个是需要划动的元素、 一个是划动元素的父元素
// 通过设置子元素在父元素中的 position:absolute top定位来实现划动
function mainNavMove(ele,farele) {
	// 父元素
    var farele = document.getElementsByClassName(farele)[0];
    // 父元素高度 为了在后面求出 父元素和子元素的高度差 来设置最大划动距离
    var fareleHeight = farele.offsetHeight;
	// 子元素
    var ele = document.getElementsByClassName(ele)[0];
   	// 子元素高度
    var eleHeight = ele.offsetHeight;
    // 父元素和子元素的高度差
    var disH = eleHeight - fareleHeight;
	
	// startY 获取初始手指坐标  disY划动距离  top是用来记录每次移动之后的top定位值,在下次划动的时候会在top值的基础上进行定位
    var startY = 0,
        disY = 0,
        top = 0;
    ele.style.top = 0;
    ele.addEventListener('touchstart', function (e) {
    	// 获取起始坐标
        startY = e.touches[0].clientY;
    }, false);
    ele.addEventListener('touchmove', function (e) {
    	// 移动过程中的坐标
        var moveY = e.touches[0].clientY;
        // 划动定位
        disY = top + (moveY - startY);
        ele.style.top = disY + 'px';
    }, false);
    ele.addEventListener('touchend', function (e) {
    	// 重置参数
        disY = 0;
        startY = 0;
        // 记录top值
        top = parseInt(ele.style.top);
        // 当top值大于0时,子元素上方出现空白,小于disH(子元素与父元素高度差),下方出现空白
        if (top > 0) {
            top = 0;
            ele.style.top = 0;
        } else if (top < -disH) {
            top = -disH;
            ele.style.top = -disH + 'px';
        }
    }, false);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值