微信H5开发(一)

article/2025/8/20 8:08:57

H5开发,一般是指移动端的页面开发。移动端可分为app和普通浏览页面。从嵌入的环境来归类:可以分为app、微信H5及手机浏览器里面打开的页面。
以前粗略的涉略过h5开发的一些知识,感觉H5并不是很难。在这半年内,接手并完成了两个微信H5项目(一期)的过程中,发觉h5开发过程中需要注意的细节有很多,碰到的兼容问题也有一些。在这里我先总结下,H5项目的一些思路及碰到的难点和解决方法。
在刚接到H5项目时,因为前端有很多框架,所有需要先确定使用什么技术。对于用vue和还是react,考虑到项目的规划时间和对框架的熟练度。这两个H5的项目我都用react来完成。
webpack+react+react-dom+react-route+redux+axios +Java+mysql ,一个完整的技术栈。
比较基础的前端开发环境搭建(webpack+react…),各位可以参考我前面写的文章。由于webpack的技术更新及部分代码优化,基础配置里面有些东西需要稍微调整下。
比如:
1. nodeJs 的指令更改
以前安装一个模块的指令:

npm install url-loader file-loader --save-dev

现在更改为:

npm install url-loader file-loader -S -D
  1. Happypack 插件将不再支持cache
new Happypack({id:"happybabel",loaders:['babel-loader'],threadPool:happypackThreadPool,cache:true,   **//需要删除这句cache的配置**verbose:true
})
  1. 在webpack plugins 里面添加配置使用(生产)环境的插件
new webpack.DefinePlugin({"process.env": { NODE_ENV: JSON.stringify("production") }
})

4.为了降低最后打包的压缩体积,把devtool:’eval-soure-map’ 改成 devtool:false。
配置css-loader将css文件进行压缩:

 {test:/\.css$/,        use:ExtractTextPlugin.extract({//使用ExtractTextPlugin 插件fallback:"style-loader",//用于开发环境use:[{loader:"css-loader",options:{minimize:true}},"postcss-loader"]}),}

5.简化redux 和action的代码
以前旧代码请参考:https://blog.csdn.net/cbboke31/article/details/77046839

  redux 以前的代码:const reducer = (state = defaultState, action) => {     switch (action.type) {//通过action的返回值来选择更新哪个state的状态case 'AlterMain':return  Object.assign({},state,{ mainText:action.payload});case 'AlterTopic':return  Object.assign({},state,{ topicText:action.payload});default:return state;}
};
精简为:
const reducer = (state = defaultState, action) => {if (action.type.indexOf("@@redux") != -1) {return state;} else {var ob = {};ob[action.type] = action.payload;return Object.assign({}, state, ob);}
};
action 旧代码:
const actions = {changeText:function(num){console.log("调用actions");switch(num){case 1:return {type:'AlterMain',payload:"mainContainer had been changed"};case 2:return {type:'AlterTopic',payload:"topicContainer had been changed"};default:return action;}
}
};
export default actions;优化为:
const actions = {changeInfo:(infotype,string)=>{   if(infotype == ""){return action;}else{return {type:infotype,payload:string};}
},
};
export default actions;

现在转入主要内容。
h5 开发,第一个面临的难题是像素问题,移动端的像素有物理像素及逻辑像素的说法,同一个像素在不同的手机,显示的大小都不一致。而且PC端浏览器的最小像素为1px,但手机端却可以显示出0.5px甚至可能更小。
一、这个像素问题要怎么解决?
h5 里面有个视口(viewport)这个标签。这个视口标签就设定逻辑像素和物理像素的比值。initial-scale=1表示1倍的关系。user-scalabe=no,表示不允许用户更改当前页面的比例。

根据网上推荐的方案,通过 docEl.clientWidth 获取移动端网页的可见区域的宽度,把可见区域分成320小分,然后规定根字体占10(pc端默认字号为10px)小分,单位取px。

(function (doc, win) {var docEl = doc.documentElement,resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',recalc = function () {var clientWidth = docEl.clientWidth;if (!clientWidth) return;docEl.style.fontSize = 10 * (clientWidth / 320) + 'px';       }; if (!doc.addEventListener) return;win.addEventListener(resizeEvt, recalc, false);doc.addEventListener('DOMContentLoaded', recalc, false);
})(document, window);

上面这个js,在react的app..js 引入。当代码成功运行,可以看到根字体的大小。
这里写图片描述

当根字体确定下来之后,后面所有设计到尺寸的地方都以跟父元素的百分比或者用以根字体的比例关系设定(以rem)。如果用rem做单位,需要所有指定尺寸的地方都需要 用UI图纸标注的尺寸除以根字体大小。如果每次尺寸都用人工转换,这个将会是个很浪费时间一件事。为了解决这个费力不讨好的问题,我启用了less。less只需要在整个文档前面设定一个根字体大小的变量(比如:@rootFontSize:23.4375),后面所有涉及到尺寸的地方直接除以这个变量就好。例子:设置div 的高度 height:44rem/@rootFontSize。 这样div设定的高度就等同于图纸(设计尺寸比例1:1的关系)上的44px。

二、 Object.assign() 兼容问题
以前碰到一个这样的现象:引入redux成功后,项目在pc端谷歌 浏览器上调试页面可以正常渲染。但如果在安卓模拟机和实体手机的环境下,页面就变成了空白。后来经过排查,发现object.assign 存在移动端兼容性问题。
这个兼容问题怎么解决?
网上有现成的方案:引入polyfill 文件,重新定义object.assign。

 if (typeof Object.assign != 'function') {// Must be writable: true, enumerable: false, configurable: trueObject.defineProperty(Object, "assign", {value: function assign(target, varArgs) { // .length of function is 2
        'use strict';if (target == null) { // TypeError if undefined or nullthrow new TypeError('Cannot convert undefined or null to object');}var to = Object(target);for (var index = 1; index < arguments.length; index++) {var nextSource = arguments[index];if (nextSource != null) { // Skip over if undefined or nullfor (var nextKey in nextSource) {// Avoid bugs when hasOwnProperty is shadowedif (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {to[nextKey] = nextSource[nextKey];}}}}return to;},writable: true,configurable: true});}

这篇就先到这。解决了移动端刚开始碰到的两个问题,处理好这个两个问题,移动端页面和pc页面开发的区别就不会很大了。
下一篇讲微信相关的知识及使用微信模块碰到的一些棘手的问题。


http://chatgpt.dhexx.cn/article/T46Yqubv.shtml

相关文章

app推广渠道数据统计Xintall

APP推广时需要统计不同渠道带来的用户量&#xff0c;这个怎么做到 我们在做一款app推广的时后&#xff0c;经常会遇到一个问题&#xff0c;比如你花了一大笔预算去给自家开发的App做广告推广&#xff0c;却无法得知不同的广告素材、不同的广告位、不同的推广平台&#xff0c;各…

还在为推广发愁?这里有一份活动推广渠道清单请查收

对于运营来说,用户量和收入是两个最关键的指标。我们希望更多的用户留在我们的产品中,新用户的留存更高,老用户也拥有较高的活跃度,用户量起来了,收入的提升也变的容易了许多。而用户分为新用户和老用户,本文列举了针对老用户推广渠道,以游戏行业为例,其他行业可以触类…

浅谈游戏系统

浅谈游戏系统 某日&#xff0c;Brandon突发奇想&#xff08;脑子抽了&#xff09;买了《异度之刃2》开始游玩&#xff0c;虽然画质不如原神&#xff0c;但他还是沉下心来连续游玩了10个小时。”这游戏战斗系统怎么样&#xff1f;“ 舍友随口一问瞬间让Brandon摸不着头脑&#x…

App全渠道推广统计方案

做过 App 运营岗位&#xff0c;肯定提过类似的需求&#xff1a; 自然新增渠道&#xff1a;自然新增的用户&#xff0c;想知道他们都是从哪下载了 App&#xff0c;以为初步分析下载原因&#xff0c;好在后续提供个性化推荐等服务。H5 推广渠道&#xff1a;开展活动需要分发大量…

浅析APP应用内及新媒体类推广渠道

之前我写了一篇关于APP用户数据分析的文章&#xff0c;提到过用户来源的问题。APP的下载注册用户来自线上线下各种渠道&#xff0c;可能是在某个常逛的网站上看到APP投放的广告产生了兴趣&#xff1b;也有可能是在朋友圈看到了朋友转的APP活动链接从而被吸引…… 这些都是通过…

app推广渠道数据统计

APP推广时需要统计不同渠道带来的用户量&#xff0c;这个怎么做到 我们在做一款app推广的时后&#xff0c;经常会遇到一个问题&#xff0c;比如你花了一大笔预算去给自家开发的App做广告推广&#xff0c;却无法得知不同的广告素材、不同的广告位、不同的推广平台&#xff0c;各…

抖音最常见的付费与免费推广渠道有哪些?3+6推广技巧干货!丨国仁网络

直播作为全新的互动传播方式,带来了互联网全新盛会的同时,也开启了企业新兴传播媒介——直播营销。直播营销为企业带来更全面的潜在客户,帮助企业更好营销。 然而,在互联网营销中,任何营销方式和工具模式,都需要推广,否则直播内容再好、主播再有颜值优势,其营销效果也会…

推广渠道如何分析?

【面试题】 有两个Excel表是A、B两个渠道推广导出的玩家用户明细数据&#xff0c;自选分析角度&#xff0c;产出数据分析报告。&#xff08;某游戏公司面试题&#xff09; 渠道A的玩家 渠道B的玩家 【参考答案】 1.分析思路 研究推广渠道A与B的的推广效果&#xff0c;以及渠道用…

渠道触点归因、推广来源追踪

消费者触点 消费者与企业的产品或服务、品牌、内容或信息发生接触的任意位置。触点作为用户获取来源叫渠道。 触点归因 研究如何获客贡献在参与的各个触点或渠道间进行分配的过程。 归因作用 客观评价触点或渠道的价值与贡献&#xff0c;尤其是发现那些被埋没的真相&#xf…

如何提升游戏吸引力——选对推广渠道就是成功的一半

2017全年,我国网络游戏营收约为2011亿元,而手游占据了55.8%的份额,全年营业收入约为1122.1亿元,同比增长38.5%。尽管移动游戏进入存量市场阶段,巨大的市场规模,仍吸引着手游开发商下场瓜分蛋糕。 然而,仅仅半年时间,国内手游市场的风向就一变再变。MOBA和“吃鸡”你方…

怎么做好游戏推广运营

游戏推广有两大类方法&#xff1a;一种是推&#xff0c;一种是引&#xff1b;前者可以快速见效&#xff0c;所以绝大多数进入游戏行业的人首选想到的是如何去找玩家&#xff0c;发链接&#xff0c;推游戏&#xff1b;但是&#xff0c;这种做法在先天上存在不足之处&#xff0c;…

教你做代理,你必须掌握的4种游戏代理平台推广小妙招

目前随着游戏市场的不断发展&#xff0c;游戏代理项目也随之呈爆发式增长&#xff0c;但有很多代理商因为初次接触游戏代理项目&#xff0c;所以在代理后并不知道如何去拓展拉新玩家的渠道&#xff0c;但如果只是依靠老玩家去不断氪金来获取盈利的话也是不现实的&#xff0c;所…

人脸识别相关及其内部原理

整理并翻译自吴恩达深度学习视频&#xff0c;卷及神经网络第四章4.1-4.5&#xff0c;有所详略。 人脸验证和人脸识别 Verification与Recognition的差异&#xff1a; 验证&#xff1a; 输入图像&#xff0c;名字/ID输出输入的图像是否和输入的名字/ID是同一个人 这是个1:1问…

人脸识别实践(1) - 基本原理与设计思路

写在前面 随着时代的高速发展&#xff0c;视频监控等基础设施越来越完备&#xff0c;计算机视觉也在各行各业开始发挥出更大的效用&#xff0c;而这一领域中大家最熟知的就是刷脸支付&#xff0c;现在大家享受着科技带来的便利。还有我们乘坐高铁&#xff0c;进站前刷身份证然后…

计算机识别人脸原理,人脸识别:原理、方法与技术

人脸识别&#xff1a;原理、方法与技术 语音 编辑 锁定 讨论 上传视频 《人脸识别&#xff1a;原理、方法与技术》是2010年2月1日科学出版社出版的图书。 《人脸识别&#xff1a;原理、方法与技术》主要介绍人脸识别技术的基本原理、研究内容、研究方法&#xff0c;以及已有的研…

OpenCV人脸识别(1)原理介绍

前言 本系列博客学习如何使用OpenCV来执行面部识别。 为了构建人脸识别系统&#xff0c;我们首先进行人脸检测&#xff0c;使用深度学习从每个人脸提取人脸特征&#xff0c;在提取到特征上训练人脸识别模型&#xff0c;然后用OpenCV识别图像和视频流中的人脸。 这里提取人脸特…

基于Python的面部表情识别分析系统

资源下载地址&#xff1a;https://download.csdn.net/download/sheziqiong/85660758 面部表情识别 练习技能&#xff1a; 爬虫数据清洗计算机视觉&#xff08;图片基本处理&#xff0c;信息提取&#xff09;深度学习 图像识别技术文档 一、项目概述 项目名称&#xff1a;面部…

基于人脸面部检测的口罩识别系统

基于人脸面部检测的口罩识别系统 摘 要 作为数字图像处理和计算机视觉领域的一个重要组成部分&#xff0c;利用摄像机对图像进行采集&#xff0c;从图像中检测人脸并进行口罩穿戴的识别的有着非常重要的研究意义和应用价值。面对突如其来的新型肺炎疫情&#xff0c;人们生活秩…

[深度概念]·简述人脸识别开发原理

0、文章概述 我们知道人脸识别在这几年应用相当广泛&#xff0c;人脸考勤&#xff0c;人脸社交&#xff0c;人脸支付&#xff0c;哪里都有这黑科技的影响&#xff0c;特别这几年机器学习流行&#xff0c;使得人脸识别在应用和准确率更是达到了一个较高的水准。 下面将带着大家…

基于深度学习的人脸面部表情识别系统【含Python源码+PyqtUI界面+原理详解】

功能演示 摘要&#xff1a;面部表情识别&#xff08;Facial Expression Recognition&#xff09;是一种通过技术手段识别人物图像中人脸面部表情的技术。本文详细介绍了其实现的技术原理&#xff0c;同时给出完整的Python实现代码、训练好的深度学习模型&#xff0c;并且通过Py…