JavaScript学习笔记(二) PC端+移动端网页特效

本文介绍了JavaScript在PC端和移动端实现网页特效的方法,包括offset、client和scroll系列的属性和区别,动画函数封装,以及移动端的触屏事件、常见特效如classList属性和click延时解决方案,还提到了移动端开发框架和插件如fastclick和Swiper。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思维导图

在这里插入图片描述

1. PC端网页特效

1.1 元素偏移量 offset 系列

1.1.1 offset 概述

  • offset 就是偏移量, 使用 offset 系列相关属性可以动态的得到该元素的位置(偏移)、大小等。
  • 功能:
    ① 获得元素距离带有定位父元素的位置
    ② 获得元素自身的大小(宽度高度)
  • 注意: 返回的数值都不带单位

在这里插入图片描述

1.1.2 常用属性

offset系列属性作用
element.offsetParent返回作为该元素带有定位的父级元素,如果父级都没有定位则返回body
element.offsetTop返回元素相对带有定位父元素上方的偏移
element.offsetLeft返回元素相对带有定位父元素左边框的偏移
element.offsetWidth返回自身包含padding,边框,内容区的宽度,返回值不带单位
element.offsetHeight返回自身包含padding,边框,内容区的高度,返回值不带单位

案例:基本使用

<div class="father"> // css略了
	<div class="son"></div>
</div>
<div class="w"></div>
<script>
// offset 系列
var father = document.querySelector('.father');
var son = document.querySelector('.son');
// 1.可以得到元素的偏移 位置 返回的不带单位的数值  
console.log(father.offsetTop);
console.log(father.offsetLeft);
// 它以带有定位的父亲为准  如果没有父亲或者父亲没有定位 则以 body 为准
console.log(son.offsetLeft);
var w = document.querySelector('.w');
// 2.可以得到元素的大小 宽度和高度 是包含padding + border + width 
console.log(w.offsetWidth);
console.log(w.offsetHeight);
</script>

案例:计算鼠标在盒子内的坐标

<div class="box"></div>
<script>
	// 在盒子内点击,想要得到鼠标距离盒子左右的距离。
	// 首先得到鼠标在页面中的坐标( e.pageX, e.pageY)
	// 其次得到盒子在页面中的距离(box.offsetLeft, box.offsetTop)
	// 用鼠标距离页面的坐标减去盒子在页面中的距离, 得到 鼠标在盒子内的坐标
	var box = document.querySelector('.box');
	box.addEventListener('mousemove', function(e) {
		// console.log(e.pageX);
		// console.log(e.pageY);
		// console.log(box.offsetLeft);
		var x = e.pageX - this.offsetLeft;
		var y = e.pageY - this.offsetTop;
		this.innerHTML = 'x坐标是' + x + ' y坐标是' + y;
	})
</script>

1.1.3 offset 与 style 区别

offsetstyle
offset 可以得到任意样式表中的样式值style 只能得到行内样式表中的样式值
offset 系列获得的数值是没有单位的style.width 获得的是带有单位的字符串
offsetWidth 包含padding+border+widthstyle.width 获得不包含padding和border 的值
offsetWidth 等属性是只读属性,只能获取不能赋值style.width 是可读写属性,可以获取也可以赋值
想要获取元素大小位置,用offset更合适想要给元素更改值,则需要用style改变

1.2 元素可视区 client 系列

client 就是客户端,我们使用 client 系列的相关属性来获取元素可视区的相关信息。通过 client 系列的相关属性可以动态的得到该元素的边框大小、元素大小等。
在这里插入图片描述

1.2.1 常用属性

client系列属性作用
element.clientTop返回元素上边框的大小
element.clientLeft返回元素左边框的大小
element.clientWidth返回自身包括padding,内容区的宽度,不含边框,返回数值不带单位
element.clientHeight返回自身包括padding,内容区的高度,不含边框,返回数值不带单位

1.3 元素滚动 scroll 系列

scroll 就是滚动,我们使用 scroll 系列的相关属性可以动态的得到该元素的大小、滚动距离等。
在这里插入图片描述

1.3.1 常见属性

scroll系列属性作用
element.scrollTop返回被卷去的上侧距离,返回数值不带单位
element.scrollLeft返回被卷去的左侧距离,返回值不带单位
element.scrollWidth返回自身实际的宽度,不含边框,返回数值不带单位
element.scrollHeight返回自身实际的高度,不含边框,返回数值不带单位

1.3.2 页面被卷去的头部

如果浏览器的高(或宽)度不足以显示整个页面时,会自动出现滚动条。当滚动条向下滚动时,页面上面被隐藏掉的高度,我们就称为页面被卷去的头部。滚动条在滚动时会触发 onscroll 事件。

  • 页面被卷去的头部:可以通过window.pageYOffset 获得,如果是被卷去的左侧 window.pageXOffset
  • 注意:元素被卷去的头部是 element.scrollTop , 如果是页面被卷去的头部 则是 window.pageYOffset

页面被卷去的头部兼容性解决方案

  1. 声明了 DTD,使用 document.documentElement.scrollTop
  2. 未声明 DTD,使用 document.body.scrollTop
  3. 新方法 window.pageYOffset 和 window.pageXOffset,IE9 开始支持
function getScroll() { 
	return {
	left: window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft||0, 
	top: window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0 
	};
} 
// 使用的时候
getScroll().left

补充:滚动窗口至文档中的特定位置。window.scroll(x, y)
注意,里面的x和y 不跟单位,直接写数字
页面滚动了多少,可以通过 window.pageYOffset 得到

1.4 三大系列总结

三大系列大小对比作用
element.offsetWidth返回自身包含padding,边框,内容区的宽度,返回值不带单位
element.clientWidth返回自身包括padding,内容区的宽度,不含边框,返回数值不带单位
element.scrollWidth返回自身实际的宽度,不含边框,返回数值不带单位
  • 用法区分:
    ① offset系列 经常用于获得元素位置 offsetLeft offsetTop
    ② client 经常用于获取元素大小 clientWidth clientHeight
    ③ scroll 经常用于获取滚动距离 scrollTop scrollLeft
    ④ 注意页面滚动的距离通过 window.pageXOffset 获得

知识点补充:
mouseentermouseover的区别
当鼠标移动到元素上时就会触发 mouseenter 事件,类似 mouseover,它们两者之间的差别是:
mouseover 鼠标经过自身盒子会触发,经过子盒子还会触发。 mouseenter 只会经过自身盒子触发。因为mouseenter不会冒泡,常跟mouseenter搭配 鼠标离开 mouseleave 同样不会冒泡

1.5 动画函数封装

1.5.1 动画实现原理

  • 核心原理:通过定时器 setInterval() 不断移动盒子位置
  • 实现步骤:
    ① 获得盒子当前位置
    ② 让盒子在当前位置加上1个移动距离
    ③ 利用定时器不断重复这个操作
    ④ 加一个结束定时器的条件
    ⑤ 注意此元素需要添加定位,才能使用element.style.left
<div></div>
<script>
	var div = document.querySelector('div');
	var timer = setInterval(function() {
		if (div.offsetLeft >= 400) {
			// 停止动画 本质是停止定时器
			clearInterval(timer);
		}
		div.style.left = div.offsetLeft + 1 + 'px';
	}, 30);
</script>

1.5.2 动画函数简单封装

注意函数需要传递2个参数,动画对象和移动到的距离。

<div></div>
<span>凉宫</span>
<script>
	// 简单动画函数封装obj目标对象 target 目标位置
	function animate(obj, target) {
		var timer = setInterval(function() {
		if (obj.offsetLeft >= target) {
			// 停止动画 本质是停止定时器
			clearInterval(timer);
		}
		obj.style.left = obj.offsetLeft + 1 + 'px';
		}, 30);
	}
	var div = document.querySelector('div');
	var span = document.querySelector('span');
	// 调用函数
	animate(div, 300);
	animate(span, 200);
</script>

1.5.3 动画函数给不同元素记录不同定时器

  • 如果多个元素都使用这个动画函数,每次都要var 声明定时器。我们可以给不同的元素使用不同的定时器(自己专门用自己的定时器)。
  • 核心原理:利用 JS 是一门动态语言,可以很方便的给当前对象添加属性。
<button>点击凉宫才走</button>
<div></div>
<span>凉宫</span>
<script>
	// var obj = {};
	// obj.name = 'andy';  给对象添加属性的方式
	// 简单动画函数封装obj目标对象 target 目标位置
	// 给不同的元素指定了不同的定时器
	function animate(obj, target) {
	// 当我们不断的点击按钮,这个元素的速度会越来越快,因为开启了太多的定时器
	// 解决方案就是 让我们元素只有一个定时器执行
	// 先清除以前的定时器,只保留当前的一个定时器执行
	clearInterval(obj.timer);
	obj.timer = setInterval(function() {
		if (obj.offsetLeft >= target) {
			// 停止动画 本质是停止定时器
			clearInterval(obj.timer);
		}
		obj.style.left = obj.offsetLeft + 1 + 'px';
		}, 30);
	}
	var div = document.querySelector('div');
	var span = document.querySelector('span');
	var btn = document.querySelector('button');
	// 调用函数
	animate(div, 300); // div直接就走
	btn.addEventListener('click', function() {
		animate(span, 200); // span点击才走
	})
</script>

1.5.4 缓动效果原理

  • 缓动动画就是让元素运动速度有所变化,最常见的是让速度慢慢停下来
  • 思路:
    ① 让盒子每次移动的距离在这里插入代码片慢慢变小,速度就会慢慢落下来。
    ② 核心算法: (目标值 - 现在的位置 ) / 10 做为每次移动的距离 步长
    ③ 停止的条件是: 让当前盒子位置等于目标位置就停止定时器
    ④ 注意步长值需要取整
<button>点击凉宫才走</button>
<span>凉宫</span>
<script>
    function animate(obj, target) {
        // 先清除以前的定时器,只保留当前的一个定时器执行
        clearInterval(obj.timer);
        obj.timer = setInterval(function() {
            // 步长值写到定时器的里面
            var step = (target - obj.offsetLeft) / 10;
            if (obj.offsetLeft == target) {
                // 停止动画 本质是停止定时器
                clearInterval(obj.timer);
            }
            // 把每次加1 这个步长值改为一个慢慢变小的值  步长公式:(目标值 - 现在的位置) / 10
            obj.style.left = obj.offsetLeft + step + 'px';
        }, 15);
    }
    var span = document.querySelector('span');
    var btn = document.querySelector('button');
    btn.addEventListener('click', function() {
            animate(span, 500);
        })
        // 匀速动画 就是 盒子是当前的位置 +  固定的值 10 
        // 缓动动画就是  盒子当前的位置 + 变化的值(目标值 - 现在的位置) / 10)
</script>

1.5.5 动画函数多个目标值之间移动

可以让动画函数从 800 移动到 500。
当我们点击按钮时候,判断步长是正值还是负值

  1. 如果是正值,则步长 往大了取整
  2. 如果是负值,则步长 向小了取整
<button class="btn500">点击凉宫到500</button>
<button class="btn800">点击凉宫到800</button>
<span>凉宫</span>
<script>
    function animate(obj, target) {
        clearInterval(obj.timer);
        obj.timer = setInterval(function() {
            var step = (target - obj.offsetLeft) / 10;
            // 把步长值改为整数 不要出现小数的问题
            step = step > 0 ? Math.ceil(step) : Math.floor(step);
            if (obj.offsetLeft == target) {
                clearInterval(obj.timer);
            }
            obj.style.left = obj.offsetLeft + step + 'px';
        }, 15);
    }
    var span = document.querySelector('span');
    var btn500 = document.querySelector('.btn500');
    var btn800 = document.querySelector('.btn800');
    btn500.addEventListener('click', function() {
        animate(span, 500);
    })
    btn800.addEventListener('click', function() {
            animate(span, 800);
        })
</script>

1.5.6 动画函数添加回调函数

回调函数原理:函数可以作为一个参数。将这个函数作为参数传到另一个函数里面,当那个函数执行完之后,再执行传进去的这个函数,这个过程就叫做回调。
回调函数写的位置:定时器结束的位置。

<button class="btn500">点击凉宫到500</button>
<button class="btn800">点击凉宫到800</button>
<span>凉宫</span>
<script>
    function animate(obj, target, callback) {
        // console.log(callback);  callback = function() {}  调用的时候:callback();
        clearInterval(obj.timer);
        obj.timer = setInterval(function() {
            var step = (target - obj.offsetLeft) / 10;
            step = step > 0 ? Math.ceil(step) : Math.floor(step);
            if (obj.offsetLeft == target) {
                clearInterval(obj.timer);
                // 回调函数写到定时器结束里面,动画结束了执行
                if (callback) {
                    // 调用函数
                    callback();
                }
            }
            obj.style.left = obj.offsetLeft + step + 'px';
        }, 15);
    }
    var span = document.querySelector('span');
    var btn500 = document.querySelector('.btn500');
    var btn800 = document.querySelector('.btn800');
    btn500.addEventListener('click', function() {
        animate(span, 500);
    })
    btn800.addEventListener('click', function() {
            // 调用函数
            animate(span, 800, function() {
                span.style.backgroundColor = 'red';//动画结束后的执行的函数
            });
        })
</script>

1.5.7 动画函数封装到单独JS文件里面

以后经常使用这个动画函数,可以单独封装到一个JS文件里面,使用的时候引用这个JS文件即可。
步骤:
①单独新建一个JS文件。
②HTML文件引入 JS 文件。

function animate(obj, target, callback) {
    // console.log(callback);  callback = function() {}  调用的时候 callback()
    // 先清除以前的定时器,只保留当前的一个定时器执行
    clearInterval(obj.timer);
    obj.timer = setInterval(function() {
        // 步长值写到定时器的里面
        // 把我们步长值改为整数 不要出现小数的问题
        // var step = Math.ceil((target - obj.offsetLeft) / 10);
        var step = (target - obj.offsetLeft) / 10;
        step = step > 0 ? Math.ceil(step) : Math.floor(step);
        if (obj.offsetLeft == target) {
            // 停止动画 本质是停止定时器
            clearInterval(obj.timer);
            callback && callback();
        }
        // 把每次加1 这个步长值改为一个慢慢变小的值  步长公式:(目标值 - 现在的位置) / 10
        obj.style.left = obj.offsetLeft + step + 'px';
    }, 15);

1.6 常见网页特效案例

1.7 淘宝 flexible.js 分析

(function flexible(window, document) {
    // 获取的html 的根元素
    var docEl = document.documentElement
    // dpr 物理像素比
    var dpr = window.devicePixelRatio || 1
    // adjust body font size  设置我们body 的字体大小
    function setBodyFontSize() {
        // 如果页面中有body 这个元素 就设置body的字体大小
        if (document.body) {
            document.body.style.fontSize = (12 * dpr) + 'px'
        } else {
            // 如果页面中没有body 这个元素,则等着 我们页面主要的DOM元素加载完毕再去设置body的字体大小
            document.addEventListener('DOMContentLoaded', setBodyFontSize)
        }
    }
    setBodyFontSize();
    // set 1rem = viewWidth / 10    设置我们html 元素的文字大小
    function setRemUnit() {
        var rem = docEl.clientWidth / 10
        docEl.style.fontSize = rem + 'px'
    }
    setRemUnit()
    // reset rem unit on page resize  当我们页面尺寸大小发生变化的时候,要重新设置下rem 的大小
    window.addEventListener('resize', setRemUnit)
    // pageshow 是我们重新加载页面触发的事件
    window.addEventListener('pageshow', function(e) {
        // e.persisted 返回的是true 就是说如果这个页面是从缓存取过来的页面,也需要从新计算一下rem 的大小
        if (e.persisted) {
            setRemUnit()
        }
    })
    // detect 0.5px supports  有些移动端的浏览器不支持0.5像素的写法
    if (dpr >= 2) {
        var fakeBody = document.createElement('body')
        var testElement = document.createElement('div')
        testElement.style.border = '.5px solid transparent'
        fakeBody.appendChild(testElement)
        docEl.appendChild(fakeBody)
        if (testElement.offsetHeight === 1) {
            docEl.classList.add('hairlines')
        }
        docEl.removeChild(fakeBody)
    }
}(window, document))

补充

  • 立即执行函数 (function() {})() 或者 (function(){}()) 。主要作用: 创建一个独立的作用域。 避免了命名冲突问题
<script>
// 1.立即执行函数: 不需要调用,立马能够自己执行的函数
function fn() {
	console.log(1);
}
fn();
// 2. 写法 也可以传递参数进来
// 1.(function() {})()    或者  2. (function(){}());
(function(a, b) {
	console.log(a + b);
	var num = 10;
})(1, 2); // 第二个小括号可以看做是调用函数
(function sum(a, b) {
	console.log(a + b);
	var num = 10; // 局部变量
}(2, 3));
// 3. 立即执行函数最大的作用就是 独立创建了一个作用域, 里面所有的变量都是局部变量 不会有命名冲突的情况
</script>
  • 下面三种情况都会刷新页面都会触发 load 事件。
    ① a标签的超链接
    ② F5或者刷新按钮(强制刷新)
    ③ 前进后退按钮
  • 注意:火狐中,有个特点,有个“往返缓存”,这个缓存中不仅保存着页面数据,还保存了DOM和JavaScript的状态;实际上是将整个页面都保存在了内存里。所以此时后退按钮不能刷新页面。
    此时可以使用 pageshow事件来触发。这个事件在页面显示时触发,无论页面是否来自缓存。在重新加载页面中,pageshow会在load事件触发后触发;根据事件对象中的persisted来判断是否是缓存中的页面触发的pageshow事件,注意这个事件给window添加。
<a href="http://www.baidu.com">链接</a>
<script>
    window.addEventListener('pageshow', function() {
        alert(11); //onpageshow 事件在每次加载页面时触发,为了查看页面是直接从服务器上载入还是从缓存中读取,你可以使用 PageTransitionEvent 对象的 persisted 属性来判断
    })
</script>

2. 移动端网页特效

移动端浏览器兼容性较好,不需要考虑以前 JS 的兼容性问题,可以放心的使用原生 JS 书写效果,但是移动端也有自己独特的地方。

2.1 触屏事件

触屏事件 touch(也称触摸事件),Android 和 IOS 都有。对象代表一个触摸点。触摸点可能是一根手指,也可能是一根触摸笔。触屏事件可响应用户手指(或触控笔)对屏幕或者触控板操作。

2.1.1 常见的触屏事件

触屏touch事件说明
touchstart手指触摸到一个DOM元素时触发
touchmove手指在一个DOM元素上滑动时触发
touchend手指从一个DOM元素上移开时触发
<div></div>
<script>
    var div = document.querySelector('div');
    // 手指触摸到DOM元素事件
    div.addEventListener('touchstart', function() {
        console.log('摸了');
    });
    // 手指在DOM元素身上移动事件
    div.addEventListener('touchmove', function() {
        console.log('动了');
    });
    // 手指离开DOM元素事件
    div.addEventListener('touchend', function() {
        console.log('溜了');
    });
</script>

2.1.2 触摸事件对象

TouchEvent 是一类描述手指在触摸平面(触摸屏、触摸板等)的状态变化的事件。这类事件用于描述一个或多个触点,使开发者可以检测触点的移动,触点的增加和减少,等等

touchstart、touchmove、touchend 三个事件都会各自有事件对象。

常见对象列表

触摸列表说明
touches正在触摸屏幕的所有手指的一个列表
targetTouches正在触摸当前DOM元素上的手指的一个列表
changedTouches手指状态发生了改变的列表,从无到有,从有到无变化

平时都是给元素注册触摸事件,所以重点记住 targetTocuhes

<div></div>
<script>
    var div = document.querySelector('div');
    //手指触摸DOM元素事件
    div.addEventListener('touchstart', function(e) {
        // touches 正在触摸屏幕的所有手指的列表 
        // targetTouches 正在触摸当前DOM元素的手指列表
        // 如果侦听的是一个DOM元素,他们两个是一样的
        // 因为我们一般都是触摸元素 所以最经常使用的是 targetTouches
        console.log(e.targetTouches[0]);
        // targetTouches[0] 就可以得到正在触摸dom元素的第一个手指的相关信息比如 手指的坐标等等
    });
    // 手指离开DOM元素事件
    div.addEventListener('touchend', function(e) {
        // 当我们手指离开屏幕的时候,就没有了 touches 和 targetTouches 列表
        // 但是会有 changedTouches
    });
</script>

2.1.3 移动端拖动元素

  1. touchstart、touchmove、touchend 可以实现拖动元素
  2. 但是拖动元素需要当前手指的坐标值,我们可以使用 targetTouches[0] 里面的pageX 和 pageY
  3. 移动端拖动的原理: 手指移动中,计算出手指移动的距离。然后用盒子原来的位置 + 手指移动的距离
  4. 手指移动的距离: 手指滑动中的位置 减去 手指刚开始触摸的位置
  • 拖动元素三步曲:
    ① 触摸元素 touchstart: 获取手指初始坐标,同时获得盒子原来的位置
    ② 移动手指 touchmove: 计算手指的滑动距离,并且移动盒子
    ③ 离开手指 touchend
  • 注意: 手指移动也会触发滚动屏幕所以这里要阻止默认的屏幕滚动 e.preventDefault()
<div></div>
<script>
    // (1) 触摸元素 touchstart:  获取手指初始坐标,同时获得盒子原来的位置
    // (2) 移动手指 touchmove:  计算手指的滑动距离,并且移动盒子
    // (3) 离开手指 touchend
    var div = document.querySelector('div');
    var startX = 0; //获取手指初始坐标
    var startY = 0;
    var x = 0; //获得盒子原来的位置
    var y = 0;
    div.addEventListener('touchstart', function(e) {
        //  获取手指初始坐标
        startX = e.targetTouches[0].pageX;
        startY = e.targetTouches[0].pageY;
        x = this.offsetLeft;
        y = this.offsetTop;
    });
    div.addEventListener('touchmove', function(e) {
        //  计算手指的移动距离: 手指移动之后的坐标减去手指初始的坐标
        var moveX = e.targetTouches[0].pageX - startX;
        var moveY = e.targetTouches[0].pageY - startY;
        // 移动我们的盒子 盒子原来的位置 + 手指移动的距离
        this.style.left = x + moveX + 'px';
        this.style.top = y + moveY + 'px';
        e.preventDefault(); // 阻止屏幕滚动的默认行为
    });
</script>

2.2 移动端常见特效

2.2.1 classList 属性

classList属性是HTML5新增的一个属性,返回元素的类名。但是ie10以上版本支持。 该属性用于在元素中添加,移除及切换 CSS 类。有以下方法

  • 添加类:element.classList.add('类名')
  • 移除类:element.classList.remove('类名')
  • 切换类:element.classList.toggle('类名')

注意以上方法里面,所有类名都不带点

<head>
    <title>Document</title>
    <style>
        .bg {background-color: black;}
    </style>
</head>
<body>
    <div class="one two"></div>
    <button> 开关灯</button>
    <script>
        // classList 返回元素的类名
        var div = document.querySelector('div');
        // console.log(div.classList[1]);
        // 1. 添加类名  是在后面追加类名不会覆盖以前的类名 注意前面不需要加.
        div.classList.add('three');
        // 2. 删除类名
        div.classList.remove('one');
        // 3. 切换类
        var btn = document.querySelector('button');
        btn.addEventListener('click', function() {
            document.body.classList.toggle('bg');
        })
    </script>
</body>

2.2.1 click 延时解决方案

  • 移动端 click 事件会有 300ms 的延时,原因是移动端屏幕双击会缩放(double tap to zoom) 页面。
  • 解决方案:
  1. 禁用缩放。 浏览器禁用默认的双击缩放行为并且去掉 300ms 的点击延迟。
  <meta name="viewport" content="user-scalable=no">
  1. 利用touch事件自己封装这个事件解决 300ms 延迟。
    原理就是:
    ①当我们手指触摸屏幕,记录当前触摸时间
    ②当我们手指离开屏幕, 用离开的时间减去触摸的时间
    ③如果时间小于150ms,并且没有滑动过屏幕, 那么我们就定义为点击
//封装tap,解决click 300ms 延时 
function tap (obj, callback) { 
	var isMove = false;
	var startTime = 0; // 记录触摸时候的时间变量
	obj.addEventListener('touchstart', function (e) {
		startTime = Date.now(); // 记录触摸时间 
    });
	obj.addEventListener('touchmove', function (e) {
        isMove = true;  // 看看是否有滑动,有滑动算拖拽,不算点击 
    });
	obj.addEventListener('touchend', function (e) {
		if (!isMove && (Date.now() - startTime) < 150) {  // 如果手指触摸和离开时间小于150ms 算点击 
			callback && callback(); // 执行回调函数
		}
		isMove = false;  //  取反    重置 
		startTime = 0;
	}); 
}
//调用
tap(div, function(){   // 执行代码         });
  1. 使用插件。 fastclick 插件解决 300ms 延迟。
<head>
	<script src="fastclick.js"></script> // 引入
</head>
<body>
    <div></div>
    <script>
        if ('addEventListener' in document) { //按照规定语法使用
            document.addEventListener('DOMContentLoaded', function() {
                FastClick.attach(document.body);
            }, false);
        }
        var div = document.querySelector('div');
        div.addEventListener('click', function() {
            alert(11);
        })
    </script>
</body>

2.3 移动端常用开发插件

2.3.1 fastclick使用

  1. 去官网找到lib文件里的fastclick.js ,复制到自己新建的fastclick.js文件
  2. 按照语法规范引入
<head>
    <title>Document</title>
    <style></style>
    <script src="fastclick.js"></script> //一:引js文件
</head>
<body>
    <div></div>
    <script>
        if ('addEventListener' in document) { // 按照它的语法规范
            document.addEventListener('DOMContentLoaded', function() {
                FastClick.attach(document.body);
            }, false);
        }
    </script>
</body>

2.3.2 Swiper使用

1、官网下载
在这里插入图片描述
2、复制:swiper-bundle.min.js和swiper-bundle.min.css文件到自己的项目
在这里插入图片描述
3、引入:自己的页面

<!DOCTYPE html>
<html>
<head>
    ...
    <link rel="stylesheet" href="dist/css/swiper-bundle.min.css"> //引入css,一般放在自己页面样式的前面
    <link rel="stylesheet" href="css/index.css">
</head>
<body>
    ...
    <script src="dist/js/swiper-bundle.min.js"></script> // 引入js
    ...
</body>
</html>

4、复制结构,样式,和初始化调用,到自己的代码中
在这里插入图片描述
5、查看官方API文档,根据需要,修改自己想要的样式、行为。css可以在自己的页面中写,覆盖掉(可以!important)。

  • 插件的使用总结
    ① 确认插件实现的功能
    ② 去官网查看使用说明
    ③ 下载插件
    ④ 打开demo实例文件,查看需要引入的相关文件,并且引入
    ⑤ 复制demo实例文件中的结构html,样式css以及js代码

2.4 移动端常用开发框架

  • 框架,顾名思义就是一套架构,它会基于自身的特点向用户提供一套较为完整的解决方案。框架的控制权在框架本身,使用者要按照框架所规定的某种规范进行开发。
  • 前端常用的框架有 React、Vue、Angular、Bootstrap 等。既能开发PC端,也能开发移动端
  • 插件一般是为了解决某个问题而专门存在,其功能单一,并且比较小。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值