JS-PC/MOBILE技巧--MOBILE

二、移动端网页特效

1、触屏事件

触摸事件概述

常见的触屏事件:

触屏touch事件说明
touchstart手指触摸到一个 DOM 元素是触发
touchmove手指在一个 DOM 元素上滑动时触发
touchend手指从一个 DOM 元素上移开时触发

示例:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>div {width: 100px;height: 100px;background-color: pink;}</style>
</head>
<body><div></div><script>var div = document.querySelector('div');div.addEventListener('touchstart', function() {console.log('I touched you.');})div.addEventListener('touchmove', function() {console.log('I touch you again.');})div.addEventListener('touchend', function() { console.log('I don`t touch you.');})</script>
</body>
</html>
触摸事件对象(TouchEvent)

常见触摸事件对象:

触摸列表说明
touches正在触摸屏幕的所有手指的一个列表
targetTouches正在触摸当前 DOM 元素上的手指的一个列表
changedTouches手指状态发生了改变的列表,从无到有、从有到无的改变
移动端拖动元素
  1. 当前手指的坐标值:可以使用 targetTouches[0] 里面的 pageX 和 pageY
  2. 移动端拖动距离:盒子原来的位置 + 手指移动的距离
  3. 手指移动的距离:手指滑动中的位置 - 手指刚开始触摸的位置

注意:手指移动会触发滚动屏幕,所以要阻止默认的屏幕滚动 e.preventDefault();

示例:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>div {position: absolute;left: 0;width: 100px;height: 100px;background-color: pink;}</style>
</head>
<body><div></div><script>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>
</body>
</html>

2、移动端常见特效

classList 属性

classList 属性是 HTML5 新增的一个属性,返回元素的类名,但是 ie10 以上版本才支持。

该属性用于在元素中添加、移除及切换 CSS 类:

添加
element.classList.add('类名');

移除
element.classList.remove('类名');

切换:
element.classList.toggle('类名');

示例:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>.bg {background-color: black;}</style>
</head>
<body><div class="one two"></div><button>开关灯</button><script>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>
</html>
click 延时解决方案

移动端 click 事件会有 300ms 的延时,原因是移动端屏幕双击会缩放 (double tap to zoom) 页面。

  1. 禁用缩放
    <meta name="viewport" content="user-scalable=no">

  2. 利用 touch 事件自己封装这个事件

    • 记录触摸事件
    • 用结束触摸事件减去触摸时间
    • 若该时间超过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) {callback && callback();}isMove = false;startTime = 0;});
    }
    tap(div, function() {...})
    

    3.使用插件:fastclick

    <!DOCTYPE html>
    <html lang="en">
    <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>div {width: 50px;height: 50px;background-color: pink;}</style><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(1);})</script>
    </body>
    </html>
    

3、移动端常用开发插件

fastclick.js 的使用
Swiper 插件的使用
其他移动端常见插件
  • superslide
  • iscroll
移动端视频插件 zy.media.js

4、移动端常用开发框架

Bootstrap

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/814314.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

本地PC安装eNSP Pro完成简单的WLAN实验

前言 上个月底华为更新一版eNSP Pro&#xff0c;新增了AC、AP、STA等设备&#xff0c;也就是说可以在eNSP中进行WLAN相关的实验了。之前写过一篇文章《将eNSP Pro部署在华为云是什么体验》介绍了怎么在华为云上部署eNSP Pro&#xff0c;这次使用本地PC机在虚拟机中安装eNSP Pr…

RF测试笔记:三阶交调失真概述及测试

1. 交调失真会带来哪些影响&#xff1f; 无线通信系统中&#xff0c;交调失真不仅会影响发射链路的性能&#xff0c;还会影响接收链路的性能。 对于发射链路&#xff0c;非线性最严重的部件非功率放大器莫属&#xff0c;当信号为宽带调制信号时&#xff0c;无论是在信号带宽内…

13 Php学习:面向对象

PHP 面向对象 面向对象&#xff08;Object-Oriented&#xff0c;简称 OO&#xff09;是一种编程思想和方法&#xff0c;它将程序中的数据和操作数据的方法封装在一起&#xff0c;形成"对象"&#xff0c;并通过对象之间的交互和消息传递来完成程序的功能。面向对象编…

基于springboot的电影评论网站系统源码数据库

基于springboot的电影评论网站系统源码数据库 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了电影评论网站的开发全过程。通过分析电影评论网站管理的不足&#xff0c;创建了一个计算机管理电影评论网站的方案。文…

基于Python的深度学习的中文情感分析系统(V2.0),附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

【STL详解 —— list的介绍及使用】

STL详解 —— list的介绍及使用 list的介绍list的介绍使用list的构造list iterator的使用list capacitylist element accesslist modifiers 示例list的迭代器失效 list的介绍 list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭…

基于Docker构建CI/CD工具链(八)用nginx收集测试报告

当前&#xff0c;我们已经介绍了如何使用 Apifox 和 JMeter 进行测试&#xff0c;尽管控制台已经输出了测试结果&#xff0c;但在实际工作中&#xff0c;我们通常需要更详细的测试报告。 测试报告在测试过程中已经生成&#xff0c;只需将其托管起来以便查阅。如果你有现成的 C…

链表linked list: 将新节点插入到了链表的开头

这段代码实现了在链表的开头插入新节点的功能。让我解释一下它的逻辑&#xff1a; 首先&#xff0c;它创建了一个新的节点 newNode。然后&#xff0c;将新节点的数据域设置为 newData&#xff0c;即要插入的新数据。接着&#xff0c;将新节点的指针域 next 指向当前的头节点 h…

C++11 设计模式4. 抽象工厂(Abstract Factory)模式

问题的提出 从前面我们已经使用了工厂方法模式 解决了一些问题。 现在 策划又提出了新的需求&#xff1a;对于各个怪物&#xff0c;在不同的场景下&#xff0c;怪物的面板数值会发生变化&#xff0c; //怪物分类&#xff1a;亡灵类&#xff0c;元素类&#xff0c;机械类 …

skynet 使用protobuf

一、安装protobuf 下面的操作方法都是在 centos 环境下操作 #下载 Protocol Buffers 源代码&#xff1a; #您可以从 Protocol Buffers 的 GitHub 仓库中获取特定版本的源代码。使用以下命令克隆仓库 git clone -b v3.20.3 https://github.com/protocolbuffers/protobuf.git#编译…

MATLAB 自定义实现点云法向量和曲率计算(详细解读)(64)

MATLAB 自定义实现点云法向量和曲率计算(详细解读)(64) 一、算法介绍二、算法步骤三、算法实现1.代码 (完整,注释清晰,可直接用)2.结果一、算法介绍 首先说明: ------这里代码手动实现,不调用matlab提供的法向量计算接口,更有助于大家了解法向量和曲率的计算方法,…

docker部署Prometheus+AlertManager实现邮件告警

文章目录 一、环境准备1、硬件准备&#xff08;虚拟机&#xff09;2、关闭防火墙&#xff0c;selinux3、所有主机安装docker 二、配置Prometheus1、docker启动Prometheus 三、添加监控节点1、docker启动node-exporter 四、Prometheus配置node-exporter1、修改prometheus.yml配置…

【架构-11】SOA和微服务?

什么是SOA&#xff1f; SOA是面向服务的架构&#xff0c;是一种软件架构模式&#xff0c;旨在通过将应用程序拆分成可重用的服务来提高应用程序的灵活性、可维护性和可扩展性。它将应用程序的不同功能单元&#xff08;称为服务&#xff09;通过这些服务之间良好的接口联系起来…

【网站项目】摄影竞赛小程序

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

刷题之动态规划-回文串

前言 大家好&#xff0c;我是jiantaoyab&#xff0c;开始刷动态规划的回文串类型相关的题目 动态规划5个步骤 状态表示 &#xff1a;dp数组中每一个下标对应值的含义是什么>dp[i]表示什么状态转移方程&#xff1a; dp[i] 等于什么1 和 2 是动态规划的核心步骤&#xff0c;…

某次众测的加解密对抗

前言 起源于某次众测中&#xff0c;遇到请求包响应包全密文的情况&#xff0c;最终实现burp中加解密。 用到的工具有 sekiro&#xff08;rpc转发&#xff09;flask&#xff08;autodecoder自定义接口&#xff09;autodecoder&#xff08;burp插件转发&#xff09; debug部分…

ClickHouse--18--argMin() 和argMax()函数

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 argMin() 和argMax()函数业务场景使用案例1.准备表和数据&#xff1a;业务场景一&#xff1a;查看salary 最高和最小的user业务场景二&#xff1a;根据更新时间获取…

【fastapi】搭建第一个fastapi后端项目

本篇文章介绍一下fastapi后端项目的搭建。其实没有什么好说的&#xff0c;按照官方教程来即可&#xff1a;https://fastapi.tiangolo.com/zh/ 安装依赖 这也是我觉得python项目的槽点之一。所有依赖都安装在本地&#xff0c;一旦在别人电脑上编写项目就又要安装一遍。很扯淡。…

ChatGPT API和llm的GUI。支持代理,基于文件的QA, GPT微调和web搜索查询

ChatGPT API和llm的GUI。支持代理&#xff0c;基于文件的QA, GPT微调和web搜索查询 文章目录 ChatGPT API和llm的GUI。支持代理&#xff0c;基于文件的QA, GPT微调和web搜索查询一、 强力功能二、 System Prompt三、 基础对话四、 对话历史五、 小而美的体验六、 极客功能七、 …

[Excel]如何限制儲存格輸入格式? 以“字首為英文字母大寫,其餘為數字,共15碼“為範例

[Excel]如何限制儲存格輸入格式 需求: 當一個excel表格需要由多位使用者來輸入資料時&#xff0c;難免會出現資料輸入錯誤問題&#xff0c;尤其是料號&#xff0c;品號或是訂單號的長類型編碼。若是問題屬於輸入錯誤"資料"但格式未錯誤&#xff0c;則可能需要讓exce…