原生JS开发手机端H5项目总结(FamilyChallenge)

news2024/10/7 13:24:41

一、 插件文件 (可多选)

  1. JQuery (操作dom)
  2. lottie.js (播放动效)
  3. preload-0.6.2.min.js(资源预加载)
  4. jweixin-1.6.0.js (h5跳转微信小程序)
  5. TweenMax.min.js (动画插件)
  6. qrcode.min.js (生成二维码)
  7. VConsole (用于移动端调试) https://unpkg.com/vconsole@latest/dist/vconsole.min.js
  8. animate.min.css (css动画)
  9. Normalize.css (css 初始化文件)
  10. px2rem VSCode插件 (移动端适配)

二、 目录基础结构和基础文件

  1. anim – lottie所需动效

  2. music – 存放点击音效和背景音乐等

  3. font – 存放所需字体

  4. img – 存放图片

  5. css – 样式文件 包括animate.min.css

  6. js – 脚本文件
    (1) main – 自己定义的文件

    • index.js – 主js文件
    • anim.js – lottie动效代码
    • loading.js – preloadjs 所需代码
    • services.js – 接口方法 和 接口地址对象

    (2) public – 引入的js插件

  7. index.html – 入口文件(类似单页应用)

三、 代码书写规范 目的:便于维护、升级和优化

1. html 规范

(1)head标签内引入css 和配置meta

 <meta charset="UTF-8" />
 <meta http-equiv="X-UA-Compatible" content="IE=edge" />
 <meta name="viewport" content="width=750, initial-scale=0.4, maximum-scale=0.4, user-scalable=no" />
 <title>家人挑战赛</title>

(2)body 内为了清楚的看清文档结构 需要每个模块之间要有空行,并且每个模块都要有注释,模块内的代码功能不同也要注释并设置空行。

(3)body 后引入脚本文件 注意:插件文件在前 自定义文件注意文件关联顺序

2. css 规范

(1) 每个页面或弹层 都用注释分割;
(2) 公共样式在前 模块样式在后 (或者拆分为两个css文件);
(3)样式表之间要有空行;
(4) 建议配置 stylelint 文件保存时自动调整css属性顺序

/* 公共样式
----------------------------------------------------------------*/
body {
    background-color: rgb(130, 160, 232) !important;
}

#bg {
    background: #83a1e9;
    height: 100%;
    width: 100%;
    left: 0;
    top: 0;
    position: fixed;
    padding: 0;
    margin: 0;
    z-index: -1;
}
3. js 规范

(1)每个方法前都要有注释;
(2)方法体之间要有空行;
(3)方法内部 涉及到方法调用的代码所在行 上下要有空行;
(4)循环语句、条件语句上下要有空行;
(5) 比较复杂的代码要注释;
(6)return 语句与上一行代码之间要有空行;

//点击事件
$('.tipbox_jian').click(async function () {
    audioNormal();

    if (GEtUSERINFO.awardStatus != 1) {
        setTimeout('audioErr()', 300);

        alert('任务已结束!');

        return;
    }

    if (GEtUSERINFO.dataTaskSortArr.includes(1)) {
        setTimeout('audioErr()', 300);

        alert('任务已完成!');

        return;
    }

    $('.task_jian').fadeIn();
});

三、 遇到棘手的问题

  1. iosAndroid 操作系统 调试 ios上经常会出现问题,所以代码在运行时要保证!!!不要出现纯前端报错
  2. 播放按钮点击音效 用户频繁点击会导致音效重叠而且声音特别大或者直接播放不了
    我们要把播放音效代码放入到setTimeOut(事件队列)中;如果一个点击按钮要同时播放两个音效 那要把其中一个音效放入setTimeout中还可以设置延时; 避免出现不可控问题。
//播放音效的方法:audioNormal  audioErr
function aaa(){
	audioNormal();
	
	if (GEtUSERINFO.awardStatus != 1) {
	     setTimeout('audioErr()', 300);
	
	     alert('任务已结束!');
	
	     return;
	}
}
  1. IOS系统有下拉的功能 会显示网址背景或着上一个弹层(这是ios系统的滚动条 我们很难控制)
    在这里插入图片描述
    (1)通过css设置一个背景 然后添加固定定位(这是大致的思路 围绕着固定定位即可)
#bg {
    background: #83a1e9;
    height: 100%;
    width: 100%;
    left: 0;
    top: 0;
    position: fixed;
    padding: 0;
    margin: 0;
    z-index: -1;
}

(2)如果想让用户禁止下拉 需要写 jq的touchstart touchmove监听事件判断是否是下拉状态 如果是则判断当前dom的scrollTop属性是否等于0 等于0则return false; !! 只是一个思路效果不理想

let startX;
let startY;
let moveEndX;
let moveEndY;
let X;
let Y;

$('.option').on('touchstart', function (e) {
    startX = e.originalEvent.changedTouches[0].pageX;
    startY = e.originalEvent.changedTouches[0].pageY;
});

$('.option').on('touchmove', function (e) {
    moveEndX = e.originalEvent.changedTouches[0].pageX;
    moveEndY = e.originalEvent.changedTouches[0].pageY;
    X = moveEndX - startX;
    Y = moveEndY - startY;

    if (Y > 0) {
        let scrpllTop = e.currentTarget.scrollTop;

        if (scrpllTop > 0) {
            return true;
        } else {
            return false;
        }
    }
});
  1. 进入首页前播放loading动画 动画时间和预加载资源过多会导致进入缓慢
    要做资源的压缩(https://tinypng.com/ 压缩png图片)
  2. 提升用户体验
    (1)接口数据缓存:有的接口数据我们只需要调用一次,比如:获取用户的奖品接口,所以在调用接口之前要先判断缓存中是否有数据,如果有则直接使用缓存的数据,没有或者你能够判断出数据变化了 则可以清空缓存再次请求接口数据。
    (2)防抖:用户频繁点击一个按钮,我们可以做简单防抖:设置一个对象有多个属性,每个属性控制不同方法的防抖,进入方法时
  • a. 判断当前方法是否在执行 是则直接return;
  • b. 设置防抖;
  • c. 当接口调用完毕在回调方法中设置防抖属性为true 恢复方法可执行;
async complateTask() {
	//防抖属性
	if (!GEtUSERINFO.complateTaskState) return;
	
	//设置防抖
    GEtUSERINFO.complateTaskState = false;
	
	//调用接口
	let taskRes = await task();
	
	if (taskRes) {
		//其他操作。。。

		//恢复方法可执行
		GEtUSERINFO.complateTaskState = true;
	}
}

四、 写代码的心得

  1. JQuery 并不只是选中dom然后修改这么简单 ,写多了我们应该想如何让jq变得可复用 ,可以将JQ代码封装成方法,入参传dom名字和一些必要属性。
  2. 在接口调用的时候 要遵循接口数据 和 视图分离的原则,接口的数据和数据的处理放在一个方法中,而我们调用这个方法拿到的数据是不需要再次格式化的。

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

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

相关文章

Lidar based off-road negative obstacle detection and analysis(论文翻译)

&#xff08;机翻 自己留作资料的 大家辩证使用 论文地址&#xff1a;https://ieeexplore.ieee.org/document/6083105&#xff09; Abstract: 无人驾驶地面车辆 (UGV) 要想在越野地形中高速行驶&#xff0c;就必须实时分析和了解周围的地形&#xff1a;它必须知道它打算去哪里&…

备忘录模式

一、备忘录模式 1、定义 备忘录模式&#xff08;Memento Pattern&#xff09;又称作快照模式&#xff08;Snapshot Pattern&#xff09;&#xff0c;指在不破坏封装的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在对象之外保存这个状态。这样以后就可将该对象恢复…

你好,Cartesi Rollups Alpha 0.8.0

支持 Arbitrum 和 Optimism 部署&#xff0c;并使内部增强。我们通过这个新版本支持在Optimism和Arbitrum L2 链上的部署&#xff0c;为 Cartesi Rollups DApp 开发人员带来了更低的延迟和更低的gas费用。我们致力于提高 Cartesi 技术的多样性和性能提升&#xff0c;并且通过 R…

【MySQL】视图

文章目录视图基本使用视图规则与限制视图 视图是一个虚拟表,其内容由查询定义,同真实的表一样,视图包含一系列带有名称的列和行数据,视图的数据变化会影响到基表,基表的数据变化也会影响到视图, 主要作用是,将表的内容,常用需要的部分创建一个部分,这样使用视图的时候,可以减…

CAS:1407166-70-4,NODA-GA-NHS ester大环化合物供应

基本信息 名称&#xff1a; NODA-GA-NHS ester 2,2′-(7-(1-carboxy-4-((2,5-dioxopyrrolidin-1-yl)oxy)-4-oxobutyl)-1,4,7-triazonane-1,4-diyl)diacetic acid CAS编号&#xff1a;1407166-70-4 分子式&#xff1a;C19H28N4O10&#xff0c;HPF6&#xff0c;TFA 分子量&a…

HTTP MIME类型

文章目录HTTP MIME类型HTTP MIME类型 HTTP 请求头中的 Accept 头是客户端用来告诉服务器&#xff0c;客户端可以处理什么类型的内容&#xff0c;这种内容类型使用 MIME 类型来表示。借助内容协商机制&#xff0c;服务器可以从诸多 MIME 中选择一项进行应用&#xff0c;并使用 …

Java精品项目源码第145期食品检测管理系统

Java精品项目源码第145期食品检测管理系统 大家好&#xff0c;小辰哥又来啦&#xff0c;今天给大家介绍一个错的基于SSM的食品检测管理系统。 文章目录Java精品项目源码第145期食品检测管理系统前言一、项目运行1.运行环境2.截图前言 提示&#xff1a;以下是本篇文章正文内容…

大数据-玩转数据-Linux部署redis集群

一、下载安装包 访问https://redis.io/download 到官网进行下载。这里下载最新版本. 或直接下载 wget http://download.redis.io/releases/redis-6.2.7.tar.gz 二、安装环境 redis是C语言开发&#xff0c;安装redis需要先将官网下载的源码进行编译&#xff0c;编译依赖gcc环…

数据结构——线性表

线性表的基本操作 对于不同的应用&#xff0c;线性表的基本操作是不同的&#xff0c;上诉操作是最基本的&#xff0c;对于实际问题中涉及的关于线性表的更复杂操作&#xff0c;完全可以用这些基本操作的组合来实现。如要使得A A U B,就是要将存在于集合B中但不存在于集合A中的…

Java项目:SSM实现茶叶电商销售商城

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 该项目为前后台项目&#xff0c;分为普通用户与管理员两种角色&#xff0c;前台普通用户登录&#xff0c;后台管理员登录&#xff1b; 管理员角…

软件设计与体系结构——结构型模式

如果有兴趣了解更多相关内容&#xff0c;欢迎来我的个人网站看看&#xff1a;瞳孔空间 结构型模式(Structural Pattern)描述如何将类或对象按某种布局组成更大的结构。就像搭积木&#xff0c;可以通过简单积木的组合形成复杂的、功能更为强大的结构 结构型模式可以分为类结构型…

(附源码)ssm教学督导管理系统 毕业设计 292346

ssm教学督导管理系统 摘 要 随着社会的发展&#xff0c;社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c;它主要是采SSM技术和mysql数据库来完成对系统的…

Springboot传参详解

作者简介 作者名&#xff1a;编程界明世隐 简介&#xff1a;CSDN博客专家&#xff0c;从事软件开发多年&#xff0c;精通Java、JavaScript&#xff0c;博主也是从零开始一步步把学习成长、深知学习和积累的重要性&#xff0c;喜欢跟广大ADC一起打野升级&#xff0c;欢迎您关注&…

有关SGI STL的alloc

在STL的使用者层面上&#xff0c;空间配置器一般是隐藏的&#xff0c;使用者不需要知道其具体实现细节即 可进行使用&#xff1b;但是从STL的实现角度来说&#xff0c;由于整个STL的操作对象都存放在容器之内&#xff0c;而容器 需要配置一定的空间来进行存放数据&#xff0c;因…

Mybatis:动态SQL(8)

动态SQL1. 动态sql简介2. if3. where4. trim5. choose、when、otherwise6. foreachforeach实现批量添加foreach实现批量删除7. SQL片段8. 总结1. 动态sql简介 Mybatis框架的动态SQL技术是一种根据特定条件动态拼装SQL语句的功能&#xff0c;它存在的意义是为了解决拼接SQL语句…

I-04Python中与C语言STL部分模板的类似模块

C语言中,我们打ACM可以用<vector>、<stack>等模板来快速实现一些经典的数据结构,可我在很多地方都没找到Python中类似于C里面的STL模板这么好用的东西.于是我在Python的标准库里面总结了些模块来直接实现类似的功能(当然也可能是我真的没找到,如果各位来客有知道的…

【浅学Java】SpringMVC程序开发

SpringMVC程序开发1. 认识SpringMVC1.1 SpringMVC是什么1.2 SpringMVC的定义1.3 MVC和SpringMVC的关系经典问题&#xff1a;Spring / SpringBoot / SpringMVC有什区别2. 学习SpringMVC的思路3. Spring MVC的创建和连接3.0 创建方法3.1 使用到的一些注解3.2 返回一个页面3.3 关于…

Qt实现全局鼠标事件监听器-Windows

Qt实现全局鼠标事件监听器-Windows版&#x1f347; 文章目录Qt实现全局鼠标事件监听器-Windows版&#x1f347;1、概述&#x1f348;2、实现效果&#x1f349;3、实现方式&#x1f34a;4、关键代码&#x1f34b;5、源代码&#x1f34c;更多精彩内容&#x1f449;个人内容分类汇…

Quartz任务调度

Quartz概念 Quartz是openSymphony开源组织在Job scheduling领域的开源项目&#xff0c;它可以与J2EE与J2SE应用程序相结合&#xff0c;也可以单独使用。 Quartz是开源且具有丰富特性的“任务调度库”&#xff0c;能够集成于任何的Java应用&#xff0c;小到独立的应用&#xf…

支持向量机SVM

文章目录SVM简单理解SVM代码实现导入数据集SVM实现画出支持向量总结SVM简单理解 在下二维平面存在以下数据点&#xff0c;不同颜色代表不同类别&#xff0c;现在需要画一条直线&#xff0c;想将两个类别分别开来&#xff0c;当有新数据加入时&#xff0c;根据这条直线&#xf…