Loading [MathJax]/jax/output/CommonHTML/config.js
部署DeepSeek模型,进群交流最in玩法!
立即加群
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >微信小程序项目实战

微信小程序项目实战

作者头像
生南星
发布于 2020-04-26 13:59:48
发布于 2020-04-26 13:59:48
2.1K00
代码可运行
举报
文章被收录于专栏:生南星生南星
运行总次数:0
代码可运行

微信小程序之设置背景图片不显示问题:

微信小程序开发设置的背景图片不显示,这是由于:background-image 只能用网络url或者base64图片编码 ,本地图片只能用 image标签src属性才行。当然 image标签src属性也可以使用网络url或者base64图片编码。

那么本地图片如何显示呢?由于我有很多页面都需要背景图便封装了公共方法。

微信小程序根目录 -> utils文件夹 -> utils.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function imgToBase(img){    let base64 = wx.getFileSystemManager().readFileSync(img, 'base64');    var imgUrl = 'data:image/jpg;base64,' + base64;    return imgUrl;}module.exports = {  imgToBase: imgToBase}

具体使用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { imgToBase } from '../../utils/util';Page({  data: {    background1 : "pages/image/index1.png"  //背景图片  },  onLoad: function () {    //图片转base64    var that = this;    that.setData({      'background': imgToBase(this.data.background)    });  },})
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<view class="bgTop" style="background:url({{background}}) center no-repeat;background-size: 100% 100%;"></view>

scroll-view横向滚动的时候,元素没有对齐。scroll-view横向滚动的时候,包含文字图片等,元素错位,第二个元素掉下去;

给 scroll-view 子元素添加:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vertical-align:top;

补充:scroll-view 的使用(微信小程序的横向及纵向滑动):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!--垂直滚动,这里必须设置高度--><scroll-view scroll-y="true" style="height: 200px">    <view style="background: red; width: 100px; height: 100px" ></view>    <view style="background: green; width: 100px; height: 100px"></view>    <view style="background: blue; width: 100px; height: 100px"></view>    <view style="background: yellow; width: 100px; height: 100px"></view></scroll-view>
<!--  white-space  normal: 正常无变化(默认处理方式.文本自动处理换行.假如抵达容器边界内容会转到下一行)  pre: 保持HTML源代码的空格与换行,等同与pre标签  nowrap: 强制文本在一行,除非遇到br换行标签  pre-wrap: 同pre属性,但是遇到超出容器范围的时候会自动换行  pre-line: 同pre属性,但是遇到连续空格会被看作一个空格  inherit: 继承--><!--水平滚动--><scroll-view scroll-x="true" style=" white-space: nowrap; display: flex" ><!--  display: inline-block-->  <view style="background: red; width: 200px; height: 100px; display: inline-block" ></view>  <view style="background: green; width: 200px; height: 100px; display: inline-block"></view>  <view style="background: blue; width: 200px; height: 100px; display: inline-block"></view>  <view style="background: yellow; width: 200px; height: 100px; display: inline-block"></view></scroll-view>

参考「 微信小程序----------踩坑记录---安卓iOS兼容等 」:https://blog.csdn.net/huihui_jiang/article/details/86742070

小程序使用wxParse解析html,wxParse的基础用法。

小程序在开发时,读取到服务器的内容如果是html格式的,因小程序不支持html格式的内容显示的,因此要对html格式的内容进行编译,可以通过wxParse来实现。

  • 下载地址:https://github.com/icindy/wxParse。将下载下来的wxParse文件夹复制到开发项目的根目录下。
  • 在要使用的小程序页面对应的wxss文件中引用 wxParse.wxss:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@import "../../wxParse/wxParse.wxss";
  • 在要使用的小程序页面对应的js文件中引用wxParse.js,并使用:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var WxParse = require('../../wxParse/wxParse.js');
Page({  data: {
  },  onLoad: function () {    const that = this;    var article = "<p>避免用不干净的手去碰手术伤口,以免引起细菌感染;术后姿势要注意,睡觉时枕高头部,有助于消肿。</p>" +      "<p><font color=\"#e8714f\"><br /></font></p>" +      "<p>上眼皮,下眼皮,眼球的视觉系统是三个相对独立的解剖生理结构和部位,所以手术是不会对视力产生影响的。</p>"
    /**    * WxParse.wxParse(bindName , type, data, target,imagePadding)    * 1.bindName绑定的数据名(必填)    * 2.type可以为html或者md(必填)    * 3.data为传入的具体数据(必填)    * 4.target为Page对象,一般为this(必填)    * 5.imagePadding为当图片自适应是左右的单一padding(默认为0,可选)    */
    WxParse.wxParse('article', 'html', article, that, 5);  }})
  • 在要使用的小程序页面对应的wxml文件中引用 wxParse.wxml
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<import src="../../wxParse/wxParse.wxml"/> <view class="wxParse">    <template is="wxParse" data="{{wxParseData:article.nodes}}"/></view>

原文链接:https://www.jianshu.com/p/d937c558efe2

微信小程序input相关。

  • 写输入框的时候,想实时获取输入框的焦点。需要的两个事件如下:

bindfocus

EventHandle

输入框聚焦时触发,event.detail = { value, height },height 为键盘高度,在基础库 1.9.90 起支持

bindblur

EventHandle

输入框失去焦点时触发,event.detail = {value: value}

解决方法:在input写上面的两个事件,然后setData .

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<input type="text" bindblur='no_focus' bindfocus="focus" />
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 获取到焦点  focus:function(e){    var that = this;    console.log(e.detail.height)    this.setData({      focus: true,      input_bottom: e.detail.height    })  },  // 失去焦点  no_focus: function (e) {      this.setData({        focus: false      })  },
  • 用户在使用输入框时手机输入法的键盘会往上划动,导致页面错乱或者闪屏。用到的事件和属性:

adjust-position

Boolean

true

键盘弹起时,是否自动上推页面

bindfocus

EventHandle

输入框聚焦时触发,event.detail = { value, height },height 为键盘高度,在基础库 1.9.90 起支持

解决方案:组件键盘自动上推,然后获取手机键盘的高度,使用定位解决。

解决方法:给 input 添加 bindfocus 事件并添加 adjust-position='{{false}}' 属性, 通过bindfocus事件获取到输入框的高度,然后再给输入框绝对定位,距离底部的高度登录获取到的高度。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 <input style='position: absolute; bottom:{{input_bottom}}px' type="text" adjust-position='{{false}}' bindfocus="focus" />
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 focus:function(e){    console.log(e.detail.height)    this.setData({      focus: true,      input_bottom: e.detail.height    })  },
  • 用户在使用键盘时,键盘顶部将输入框底部的边框遮挡了,导致下边框消失。用到的事件和属性:

cursor-spacing

Number

0

指定光标与键盘的距离,单位 px 。取 input 距离底部的距离和 cursor-spacing 指定的距离的最小值作为光标与键盘的距离

解决方法:通过 cursor-spacing 调整键盘与输入框的距离。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 <input type="text" cursor-spacing='5' />

原文链接「微信小程序input详解」 :https://blog.csdn.net/qq_35713752/article/details/81104629

微信小程序自定义组件的使用、子父组件传值以及调用自定义组件中的方法。

  • 自定义组件及其使用方法。

小程序根目录下新建文件夹 components 放置自定义组件,如自定义组件名字为 myComponent,myComponent.wxml文件代码为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<view class="inner">hello!</view>

myComponent.js 文件代码为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const app = getApp()Component({  properties: {
  },  data: {    // 这里是一些组件内部数据    someData: {}  },  methods: {    customMethod(){      console.log('hello world! I am learning 微信小程序')    }  }})

在 myComponent.json 的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{  "component": true}

使用:在需要调用自定义组件的文件中,如pages/index文件需要调用自定义组件,那么则需要在pages/index/index.json文件中添加如下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{  "usingComponents": {    "myComponent": "../../components/myComponent/myComponent"   // 组件名以及组件所在路径  }}

index.wxml文件代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<view>    <myComponent id="myComponent"></myComponent></view>

调用子组件的方法,index.wxml文件代码变为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<view>    <button bindtap="showComponent">组件调用</button>    <myComponent id="myComponent"></myComponent></view>

index.js文件部分代码为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Page({  /**   * 生命周期函数--监听页面初次渲染完成   */  onReady: function () {    //  页面初次渲染完成后,使用选择器选择组件实例节点,返回匹配到组件实例对象      this.myComponent = this.selectComponent('#myComponent')  },   showComponent: function () {      let myComponent = this.myComponent      myComponent.customMethod()  // 调用自定义组件中的方法   }})

父子组件传递数据的方法

  • 父组件向子组件传递数据

parent.wxml:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<myComponent name="{{name}}" age="{{age}}"></myComponent>

parent.js :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data: {  name: 'Peggy',  age: 25}

child.js:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
properties: {  name: {    type: String,    value: '小明'  },  age: Number}

父组件向子组件传值以属性的形式,子组件以properties接收,并可指定数据类型type以及默认值value。在wxml里可直接以{{name}}的形式使用,而在js中以this.properties.name获取。

  • 子组件向父组件传值

child.js:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
methods: {  changeName() {    this.triggerEvent('changeName', {      name: '李四'    })  }}

parent.wxml:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<myComponent name="{{name}}" age="{{age}}" bindchangeName="changeName"></myComponent>

parent.js:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
changeName(event) {  console.log(event.detail)  // { name: '李四' }}

子组件向父组件传递数据使用this.triggerEvent方法,这个方法接受3个参数:this.triggerEvent('myevent', myEventDetail, myEventOption);

myevent为方法名, myEventDetail是传到组件外的数据, myEventOption为是否冒泡的选项,有三个参数可以设置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bubbles    默认false 事件是否冒泡
composed 默认false 事件是否可以穿越组件边界
capturePhase 默认false 事件是否拥有捕获阶段

在父组件监听事件bindchangeName="changeName",在changeName方法里有一个event参数,可以从event.detail里拿到组件内部传出来的值。

参考文章「 微信小程序:自定义组件的数据传递 」:https://segmentfault.com/a/1190000014474289

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生南星 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
微信开发如何保证access_token/jsapi_ticket长期有效
为了使第三方开发者能够为用户提供更多更有价值的个性化服务,微信公众平台开放了许多接口,包括自定义菜单接口、客服接口、获取用户信息接口、用户分组接口、群发接口等,开发者在调用这些接口时,都需要传入一个相同的参数access_token,它是公众账号的全局唯一票据,它是接口访问凭证。
似水的流年
2018/01/14
1.2K0
小程序开发技巧总结(三)-- 云开发时效数据刷新和存储 (access_token等)
小程序中经常有需要进行OCR识别,或者使用外部api例如百度AI识别等接口,请求调用这些接口需要令牌,即一些具有时效性的数据。本文以小程序云开发使用百度API接口为例,介绍access_token定时刷新和请求机制。
Kindear
2020/03/19
1.6K0
小程序开发技巧总结(三)-- 云开发时效数据刷新和存储 (access_token等)
微信开发获取AccessToken的方式
对于暂时没有这些权限的微信公众号,开发者可以申请测试账号来体验和测试微信公众平台的所有高级接口功能
SmileNicky
2019/01/17
2K0
WxJava | weixin-java-mp组件核心源码剖析+access_token管理的最佳实践
在微信公众号管理平台建设中,主要涉及两个场景: 1、调微信API执行相关操作 2、接收微信的回调并执行相关操作。
烟雨平生
2023/11/07
4.9K0
WxJava | weixin-java-mp组件核心源码剖析+access_token管理的最佳实践
nodejs微信公众号开发
网上关于node开发公众号的资料相当缺乏,本文旨在以node的视角对公众号开发做一个阐述。
一粒小麦
2019/08/06
6.4K4
微信小程序 接口调用讲解 (AccessToken、小程序码登录)
♘ 通过微信小程序实现扫码登录 ♘【网页版】使用小程序码登录 ♘ 通过扫小程序码实现网站登录功能
泥豆芽儿 MT
2022/05/10
18.9K0
微信小程序 接口调用讲解 (AccessToken、小程序码登录)
独立开发微信公众号服务的一次复盘
上篇文章主要分享了异步编程的一些经验。主要包括回调函数,发布订阅,Promise,async await以及yield关键字。
terrence386
2022/07/14
4560
独立开发微信公众号服务的一次复盘
微信小程序 ---- 从短信、邮件、微信外网页等场景打开小程序
测试地址 复制地址到短信、邮件、或者其他浏览器:http://read.yajunliang.com/quanyi 1. 文档 《URL Scheme打开小程序》 2. 《获取 access_t
Rattenking
2021/02/01
2.2K0
使用laf云函数进行微信公众号全局access_token缓存
平时会用laf云做一些小工具,最近在做公众号相关调研时遇到了缓存token的问题,每天只允许调用2000次,所以需要将公众平台的API调用所需的access_token缓存下来。
薛定喵君
2023/07/24
3980
.Net微信网页开发之JSSDK使用步骤和配置信息timestamp(时间戳),nonceStr(随机串),signature(签名),access_token(接口调用凭据)的生成获取讲解
  因为接下来会有几篇关于微信JS-SDK功能使用的文章,主要会对微信分享,获取设备信息,获取地理位置,微信扫一扫这几个功能进行讲解。而这几个功能都是围绕着微信JS-SDK实现的,首先使用微信JS-SDK时我们需要生成对应的配置信息,才能够成功的调用微信JS-SDK。看了下微信官方文档对于accessToken和jsapi_ticket的生成示例代码并没有看到咱们大.Net的,所以为了帮助那些刚接触微信开发的同学,在这里我会把自己在使用微信JS-SDK的一些步骤和配置信息生成的方法展示出来,希望能够和大家相互学习共同进步。
追逐时光者
2019/08/28
2.2K0
.Net微信网页开发之JSSDK使用步骤和配置信息timestamp(时间戳),nonceStr(随机串),signature(签名),access_token(接口调用凭据)的生成获取讲解
koa框架实现的刷新微信全局access_token服务
使用node的request库请求微信接口,将获取的token及设定的有效期存入本地json文件 请求时判断当前时间是否在设定的有效期(这里暂定为1小时)内,有效则返回缓存在json文件的token,无效则重新请求微信接口返回token并写入本地json
薛定喵君
2020/05/28
1K0
koa框架实现的刷新微信全局access_token服务
【微信生态圈】微信体系中的access_token有哪些?
access_token是公众号/小程序的全局唯一接口调用凭据,公众号/小程序调用各接口时都需使用access_token。开发者需要进行妥善保存。 access_token的存储至少要保留512个字符空间。 access_token的有效期目前为2个小时,需定时刷新。
烟雨平生
2023/09/22
9160
【微信生态圈】微信体系中的access_token有哪些?
【愚公系列】2022年09月 微信小程序-微信小程序实现网页一键登录功能
如果微信小程序要获取微信登录的用户信息,需要拿到code去后台换取用户信息,具体步骤又如下:
愚公搬代码
2022/10/05
1.7K0
微信公众号开发系统入门教程(公众号注册、开发环境搭建、access_token管理、Demo实现、natapp外网穿透)
微信公众号分为服务号、订阅号、企业号,订阅号可以个人申请,服务号和企业号要有企业资质才可以。
全栈程序员站长
2022/09/06
3K0
微信公众号开发系统入门教程(公众号注册、开发环境搭建、access_token管理、Demo实现、natapp外网穿透)
手把手做一个公众号GPT智能客服(三)客服消息
https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Service_Center_messages.html
Maynor
2023/09/28
3380
微信小程序模板消息实现(PHP+ 小程序)
参考官方文档和部分资料,总结小程序模板消息推送以及相关注意事项,楼主踩过的坑,特来与大家分享。
ITer.996
2019/08/28
6K0
微信小程序模板消息实现(PHP+ 小程序)
微信个人公众号开发--(5)获取Token并自定义菜单
微信官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183 access_token是公众号的全局唯一票据,公众号
浩Coding
2019/07/02
1.3K0
微信个人公众号开发--(5)获取Token并自定义菜单
聊聊微信分享的前端实现
之前对分享功能的实现也知道个七七八八,但一直没有在业务中实现过。今年参与的盲盒类产品正好用到了分享功能,包括:
前端森林
2022/01/24
1.7K0
聊聊微信分享的前端实现
access_token获取和缓存进行2小时刷新
做微信相关开发,基本上离不开access_token,只要是使用它的资源类api基本上必不可少,之前都是直接存进数据库了,但随着做的产品过多,使用数据库得办法很累赘,所以直接使用php函数进行处理,更方便。
许坏
2019/07/09
1.6K0
access_token获取和缓存进行2小时刷新
php实现微信小程序消息通知「建议收藏」
接入消息通知指引地址:https://mp.weixin.qq.com/debug/wxadoc/dev/api/custommsg/callback_help.html
全栈程序员站长
2022/09/29
2.2K0
php实现微信小程序消息通知「建议收藏」
推荐阅读
相关推荐
微信开发如何保证access_token/jsapi_ticket长期有效
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验