微信小程序--试水
应公司需求,接手小程序,在此之前我是一点也没有接触过,对此,拿过小程序文档和官方案例就一顿恶补,在此期间也看过一些小程序建立模型的视频,终于对小程序知晓一二,拿过项目开始研究。好了废话不多说,总结一下此次做小程序遇到的坑以及难点:
1、input、textera、video等组件层级太高
问题描述:页面有个input文本框,有个自定义的弹框(非微信自己的组件),当弹框显示时候,弹层底下的input文本框覆盖到弹层上,加z-index无效;
解决法案:网上很多人遇到这个问题,大概是微信官方组件的“特点”,所以需要我们手动处理设置一个控制input显示隐藏的变量,iputIsShow: true 默认为true ,input文本框显示,当弹层显示时,iputIsShow:false, input文本框隐藏。但这个方法并不是针对所有场景都有效,当弹窗部分没有遮挡住input文本框时候不适用;
2、页面生成图片
问题描述:把一组数据单独生成一张图片;
解决方案:利用canvas绘制图片,把需要用到的数据添加在canvas上;
3、canvas适配问题
问题描述:小程序中所有的单位都是用rpx,却唯独canvas默认是px;
解决方案: (1)有网友建议单独写一个view,把需要的图片用view写出来,获取它的宽高赋值给canvas(这是什么鬼方法,直接被我pass掉了);
(2)我在思考既然小程序官方可以把px换算rpx,那我们一定也可以把px换算成rpx,果然,官方规定屏幕宽度为750物理像素,无论它在什么设备上宽度都是750物理像素,那么我们就可以获取到它在设备上rpx与px的换算比例:设备宽/750 ,在canvas上的实际宽度为:设备宽/750*实际量取的值
var context = wx.createCanvasContext('mycanvas')
var that = this
// 获取canvas的的宽 自适应宽(设备宽/750) px
var cWidth = wx.getSystemInfoSync().windowWidth/
context.drawImage("/imgs/pic-bg.png", , , cWidth * , cWidth * );
// 国外院校
var forSchool = this.data.dataList.foreigncolleges
// 大于5条数据所取前5条
if (forSchool.length>){
for (var i = ; i < ; i++) {
context.setFillStyle("#eb8848");
context.setFontSize(cWidth * );
context.fillText(forSchool[i].schoolname.trim(), cWidth * , (i + ) * cWidth * + cWidth * )
context.setFillStyle("#b0b4bc");
context.setFontSize(cWidth * );
context.fillText(forSchool[i].ranking.trim(), cWidth * , (i + ) * cWidth * + cWidth * )
//当录取率为null时"-"显示
if (forSchool[i].rate == null){
context.setFillStyle("#b0b4bc");
context.setFontSize(cWidth * );
context.fillText('-', cWidth * , (i + ) * cWidth * + cWidth * )
}else{
context.setFillStyle("#b0b4bc");
context.setFontSize(cWidth * );
context.fillText(forSchool[i].rate.trim(), cWidth * , (i + ) * cWidth * + cWidth * )
}
context.beginPath();//开始一个新的路径
context.setStrokeStyle('#eee');
context.moveTo(cWidth * , (i + ) * cWidth * + cWidth * );//路径的起点
context.lineTo(cWidth * , (i + ) * cWidth * + cWidth * );//路径的终点
context.stroke();//对当前路径进行描边
context.closePath();//关闭当前路径
}
} else {//小于5条时全部展示
for (var i = ; i < forSchool.length; i++) {
context.setFillStyle("#eb8848");
context.setFontSize(cWidth * );
context.fillText(forSchool[i].schoolname.trim(), cWidth * , (i + ) * cWidth * + cWidth * )
context.setFillStyle("#b0b4bc");
context.setFontSize(cWidth * );
context.fillText(forSchool[i].ranking.trim(), cWidth * , (i + ) * cWidth * + cWidth * )
//当录取率为null时"-"显示
if (forSchool[i].rate == null) {
context.setFillStyle("#b0b4bc");
context.setFontSize(cWidth * );
context.fillText('-', cWidth * , (i + ) * cWidth * + cWidth * )
} else {
context.setFillStyle("#b0b4bc");
context.setFontSize(cWidth * );
context.fillText(forSchool[i].rate.trim(), cWidth * , (i + ) * cWidth * + cWidth * )
}
context.beginPath();//开始一个新的路径
context.setStrokeStyle('#eee');
context.moveTo(cWidth * , (i + ) * cWidth * + cWidth * );//路径的起点
context.lineTo(cWidth * , (i + ) * cWidth * + cWidth * );//路径的终点
context.stroke();//对当前路径进行描边
context.closePath();//关闭当前路径
}
}
context.draw();
微信小程序--试水的更多相关文章
- 微信小程序踩坑集合
1:官方工具:https://mp.weixin.qq.com/debug/w ... tml?t=1476434678461 2:简易教程:https://mp.weixin.qq.com/debu ...
- 微信小程序开源项目库汇总
最近做了一个微信小程序开源项目库汇总,里面集合了OpenDigg 上的优质的微信小程序开源项目库,方便移动开发人员便捷的找到自己需要的项目工具等,感兴趣的可以到GitHub上给个star. UI组件 ...
- 微信小程序开源项目库集合
UI组件 weui-wxss ★852 - 同微信原生视觉体验一致的基础样式库 Wa-UI ★122 - 针对微信小程序整合的一套UI库 wx-charts ★105 - 微信小程序图表工具 wema ...
- 微信小程序一:微信小程序UI组件、开发框架、实用库
作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/8079095.html 内容持续更新,维护中 邮箱 ...
- 微信小程序基础之开源项目库汇总
awesome-github-wechat-weapp 是由OpenDigg整理并维护的微信小程序开源项目库集合.我们会定期同步OpenDigg上的项目到这里,也欢迎各位提交项目给我们. (链接:ht ...
- 微信小程序UI组件、开发框架、实用库...
UI组件 weui-wxss ★852 - 同微信原生视觉体验一致的基础样式库 Wa-UI ★122 - 针对微信小程序整合的一套UI库 wx-charts ★105 - 微信小程序图表工具 wema ...
- 微信小程序框架集合
UI组件 weui-wxss ★852 - 同微信原生视觉体验一致的基础样式库 Wa-UI ★122 - 针对微信小程序整合的一套UI库 wx-charts ★105 - 微信小程序图表工具 wema ...
- 微信小程序< 3 > ~ 微信小程序开源项目合集
简介 移动开发者想学习微信小程序需要学习一点HTML ,CSS和JS才能够比较快速的上手,参考自己学习Android学习过程,阅读源码是一个很好的方式,所以才收集了一些WeApp的开源项目. awes ...
- 微信小程序开源
| UI组件 | | | | | | | | | weui-wxss ★1873 - 同微信原生视觉体验一致的基础样式库 | | | | | | zanui-weapp ★794 - 好用易扩展的小程 ...
随机推荐
- Docker学习笔记 - 在运行中的容器内启动新进程
docker psdoker top dc1 # 容器情况# 在运行中的容器内启动新进程docker exec [-d] [-i] [-t] 容器名 [command] [args]docker ex ...
- Python基础数据类型之列表和元组
一.列表 list 列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,他是以[]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如: li ...
- java 中String类的常用方法总结,带你玩转String类。
String类: String类在java.lang包中,java使用String类创建一个字符串变量,字符串变量属于对象.String类对象创建后不能修改,StringBuffer & St ...
- Spark测试代码
测试代码: import org.apache.spark.{SparkConf, SparkContext} import org.apache.spark.sql.hive.HiveContext ...
- asp.net core 三 Nuget包管理
参考连接:http://www.cnblogs.com/netcore2/p/7412891.html 这里的说明,基本就是学习了别人的文章,自己做了个备份 asp.net c ...
- Delphi X10.2 + FireDAC 使用 SQL 语句 UPDATE
MainForm.Conn.StartTransaction; UserManagerQuery.SQL.Clear; UserManagerQuery.SQL.Text := 'UPDATE tab ...
- Dev GridControl GridView常用属性
1.隐藏最上面的GroupPanel: gridView1.OptionsView.ShowGroupPanel=false; 2.得到当前选定记录某字段的值: sValue=Table.Rows[g ...
- Django REST framework+Vue 打造生鲜超市(十)
十一.pycharm远程代码调试 第三方登录和支付,都需要有服务器才行(回调url),我们可以用pycharm去远程调试服务器代码 服务器环境搭建 以全新阿里云centos7系统为例: 11.1.阿里 ...
- java设计模式之代理设计模式(Proxy)
一个简单Proxy代理模式范例 interface Subject{ //定义核心主题所要完成的功能 public void make(); } class RealSubject implement ...
- [C#].Net Core 获取 HttpContext.Current 以及 AsyncLocal 与 ThreadLocal
在 DotNetCore 当中不再像 MVC5 那样可以通过 HttpContext.Current 来获取到当前请求的上下文. 不过微软提供了一个 IHttpContextAccessor 来让我们 ...