Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
微信小程序电商实战—首页篇(上)
在index.wxml我们使用bindtap进行点击事件监听,设置事件名称为navbarTap并且在index.js里设置这个事件对应的逻辑处理。我们在组件上使用wx:for控制属性绑定一个数组,即可使用数组中各项的数据重复渲染该组件。默认数组的当前项的下标变量名默认为index,数组当前项的变量名默认为item,想要了解wx:for可以参考该资料:https://www.w3cschool.cn/weixinapp/weixinapp-list.html
游离于山间之上的Java爱好者
2022/09/21
1.1K0
微信小程序电商实战—首页篇(上)
微信小程序实战–集阅读与电影于一体的小程序项目(七)
27.实现上滑加载更多数据 movie-grid-template.wxml <import src="../movie/movie-template.wxml" /> <template name="movieGridTemplate"> <scroll-view class="grid-container" scroll-y="true" scroll-x="false" bindscrolltolower="onScrollLower"> <block wx:for="{{movies}}
zhang_derek
2018/08/30
6970
微信小程序实战–集阅读与电影于一体的小程序项目(七)
两万字:讲述微信小程序之组件
6.cover-image目前原生组件均已支持同层渲染,建议使用 image 替代
淼学派对
2022/11/20
4K0
两万字:讲述微信小程序之组件
微信小程序|scroll-view组件
小程序的视图容器组件分为五个组件,分别是view组件、scroll-view组件、swiper组件、movable组件与cover组件,如图2.1。这里介绍scroll-view组件的用法。
算法与编程之美
2020/03/13
1.5K0
基于微信小程序云开发(校园许愿墙app)妄想替代学校的表白墙
随着移动端的不断发展,人们大部分的办公及生活应用都开始趋向于移动端。然而在2017年“微信之父”张小龙带领团队,开发了一款叫做微信小程序的东西,它的出现打破了人们认识移动端的隔膜,由以前的需要先下载app然后在开始工作的老式模式,逐渐的趋向于小程序app(无需下载)的形式。
淼学派对
2022/11/20
1.7K0
基于微信小程序云开发(校园许愿墙app)妄想替代学校的表白墙
小程序自定义modal弹窗封装实现
小程序官方提供了 wx.showModal 方法,但样式比较固定,不能满足多元化需求,自定义势在必行~
solocoder
2022/04/06
4K2
小程序自定义modal弹窗封装实现
微信小程序——轮播图、组件传值、下拉刷新、导航 实战开发
滑块视图容器。其中只可放置swiper-item组件,否则会导致未定义的行为。 属性表如下
wsuo
2020/09/22
1.7K0
微信小程序【事件绑定】入门一篇就搞定
上述代码就四行,首先是一个 input 输入框,目的是用来输入一些值,同时下面标签就会显示,接着是两个 button 用来分别执行 +1 或者 -1 的操作,最后一个 view 标签就是为了 进行数据输入或变化的回显
BWH_Steven
2020/09/10
2.3K0
微信小程序【事件绑定】入门一篇就搞定
【微信小程序】view和scroll-view组件的基本使用
小程序中的组件也是由宿主环境提供的,开发者可以使用组件快速搭建出页面结构,官方把小程序里的组件分为了9大类,分别是 ①视图容器 ②基础内容 ③表单组件 ④导航组件 ⑤媒体组件 ⑥map地图组件 ⑦canvas画布组件 ⑧开放能力 ⑨无障碍访问
hacker707
2022/10/31
1.1K0
【微信小程序】view和scroll-view组件的基本使用
微信小程序之组件(一)
组件是视图层的组成单元,具有UI风格样式及特定的功能效果。当打开某款小程序后,界面中的图片,文字等多需要使用组件,小程序组件使用灵活,组件之间通过相互嵌套进行界面设计,开发者可以通过组件的选择和样式属性设计出不同的界面效果,一个组件开始包括标签和结束标签,属性用来装饰这个组件的样式。
淼学派对
2022/11/20
3.1K0
微信小程序之组件(一)
微信小程序入门——一个简单的记事本
页面设计包括两个部分,上部分的笔记列表,使用 TDesign 的 collapse 组件组成,下部分为输入区域,由一个文本输入框和提交按钮组成,其中文本输入框用 textarea 组件,按钮用 button 组件。
dandelion1990
2024/01/18
4910
【愚公系列】《微信小程序与云开发从入门到实践》056-迷你商城小程序的开发(电商应用首页开发)
随着移动互联网的快速发展,电商行业也迎来了新的机遇与挑战。迷你商城小程序作为一种便捷的购物工具,逐渐成为消费者线上购物的重要选择。它不仅具备快速加载、易于分享的特点,还能为用户提供个性化的购物体验。
愚公搬代码
2025/01/31
2360
打造新闻阅读微信小程序:从列表展示到实用功能一应俱全
微信小程序作为一个轻量级的应用平台,为用户提供了便捷的信息获取和服务体验。本文将以一个新闻阅读类的微信小程序为例,详细介绍如何实现新闻列表展示、图片加载、Tab滑动切换、获取数据、处理图片加载失败、数据缓存、分页加载、错误处理、下拉刷新、列表项点击跳转、用户授权、搜索功能、图片预览和小程序分享等功能。跟随本文的步骤,你将轻松掌握微信小程序的开发技巧,为用户打造一款实用且美观的新闻阅读应用。
陆业聪
2024/07/23
4390
打造新闻阅读微信小程序:从列表展示到实用功能一应俱全
微信小程序实现各种特效实例
写在前面 最近在负责一个微信小程序的前端以及前后端接口的对接的项目,整体上所有页面的布局我都已经搭建完成,里面有一些常用的特效,总结一下,希望对大家和我都能有所帮助 实例1:滚动tab选项卡 先看一下
okaychen
2018/01/05
4.2K3
微信小程序实现各种特效实例
零基础微信小程序开发——小程序的宿主环境(保姆级教程+超详细)
宿主环境(host environment)指的是程序运行所必须的依赖环境。例如: Android 系统和 iOS 系统是两个不同的宿主环境。安卓版的微信 App 是不能在 iOS 环境下运行的,所以,Android 是安卓软件的宿主环境,脱离了宿主环境的软件是没有任何意义的!
小白的大数据之旅
2025/05/16
950
零基础微信小程序开发——小程序的宿主环境(保姆级教程+超详细)
小程序 | 6-常用组件及组件共同属性
view 组件 ,即视图组件,是块级元素,默认独占一行,通常用作容器。类似前端的 div.
CnPeng
2021/05/17
1.3K0
小程序 | 6-常用组件及组件共同属性
微信小程序开发实战(9):单行输入和多行输入组件
input组件用于录入单行文本,尽管input的基本功能是文本录入,但该组件的属性还是比较多的,也比较复杂。下面是input属性的属性及其含义。
蒙娜丽宁
2020/07/16
3.2K0
微信小程序开发实战(9):单行输入和多行输入组件
03-微信小程序常用组件-视图容器组件
微信小程序包含了六大组件:视图容器、基础内容、导航、表单、互动和导航。这些组件可以通过WXML和WXSS进行布局和样式设置,从而构建出丰富的小程序界面和交互体验。
度假的小鱼
2023/11/21
5000
03-微信小程序常用组件-视图容器组件
【愚公系列】《微信小程序与云开发从入门到实践》035-在小程序中使用动画
随着移动互联网的快速发展,小程序以其轻便、便捷的特性,受到了越来越多用户的青睐。而在用户体验日益重要的今天,动画作为增强交互效果和视觉吸引力的重要手段,正逐渐成为小程序开发中的关键元素。
愚公搬代码
2025/01/24
3600
微信小程序+php实现即时通讯聊天功能
Github:https://github.com/swoole/swoole-src/tags
黄啊码
2022/05/10
2.1K0
微信小程序+php实现即时通讯聊天功能
推荐阅读
相关推荐
微信小程序电商实战—首页篇(上)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验