加入缓存提升用户体验

思路:先从缓存中寻找数据或者从服务器中获取数据写入缓存中

优点:减少网络访问次数,提升用户体验

解决缓存带来的问题

问题:比如原先是不喜欢的在点击喜欢的时候,跳到下一期刊后返回来再次点击会报错。原因是点击不喜欢后服务器端更新了,但加入缓存后返回来的时候期刊依然是缓存中的,所以会出现请求错误。

解决:单独请求获取喜欢的状态,在控件上不使用缓存中的数据

ES6模板字符串和扩展运算符的应用

模板字符串

  • 作用,增强代码可读性
console.log(a+'456');//代码可读性不强
console.log(`${a}456`);//可读性更强

扩展运算符

  • 作用,可以有效减少wxml中对象的使用,比如
  • 缺点,可读性不太好,有些时候不知道对象中有些什么数据
//原先的写法
this.setData({
classic: res
})
//扩展运算符写法
this.setData({
classic: ...res//res是从服务端获取的数据
})
在wxml中
//原先的写法
<Text>{{classic.id}}</Text>
//之后的写法
<Text>{{id}}</Text>

让对象中的属性直接平铺了出来

独立更新like组件的状态

将data中的count和state单独提取出来

让自定义组件支持hidden

  • wx:if条件语法
<v-music wx:if='{{false}}'/>
<v-essay wx:if='{{false}}'/>
<v-movie wx:if='{{true}}'/>
  • 组件的hidden属性,但是hidden只会作用于小程序自身的组件,对自定义组件无效。所以我们可以通过传值来达到这样的效果
page页面的wxml
<v-music hidden="{{fasle}}"/>
组件内的js
properties:{
hidden: {
type: Boolean
}
}
组件的wxml
<View hidden="{{hidden}}">
...
</View>

wx:if和hidden的区别

wx:if会完整的执行组件的生命周期,而hidden不会。hidden只会控制组件的隐藏和显示。

解决wxss在组件间的复用问题

  • 在组件同级目录下面新建common.wxss文件
  • 将共同wxss代码复制到common.wxss文件中
  • 在组件的wxss中引用
@import "../common.wxss";

音乐组件的具体实现

  • 老版实现方式
  • 新版实现方式
    • 实现点击后图片状态切换,同时音频响起
    • 当当前音乐出于播放状态的时候,切换不同期刊后切回来,音乐继续播放同时界面上显示的是要暂停的图标
    • 代码优化
组件的wxml代码
<image bind:tap="onPlay" src="{{playing?playSrc:pauseSrc}}" title="{{classic.title}}"/>
组件的js代码
const mMgr = wx.getBackgroundAudioManager();
properties: {
src: {
title: String
type: String
}
}
data: {
...
}
attached: function(){
//恢复状态
this._recoverStatus();
//监听音乐播放
this._monitorSwitch();
},
//detached: {
// mMgr.stop();
//}
method:{
onPlay: function(e){
if(!this.data.playing){
//图片切换
this.setData({
paying: true
})
//音乐播放
mMgr.src = this.properties.src;
mMsgr.title = this.properties.title;
}else{
//图片切换
this.setData({
paying: false
})
//音乐停止
mMgr.pause();
}
},
//让后台播放器与界面图标同步
_monitorSwitch: function(){
mMgr.onPlay(()=>{
this._recoverStatus();
})
mMgr.onPause(() => {
this._recoverStatus();
})
mMgr.onStop(() => {
this._recoverStatus();
})
mMgr.onEnded(() => {
this._recoverStatus();
})
},
//恢复状态
_recoverStatus: function () {
if (mMgr.paused) {
this.setData({
playing: false
})
return;
}
if (mMgr.src === this.properties.src) {
this.setData({
playing: true
})
}
},
}

实现音乐控件的旋转效果

动画API

CSS3的canvas

//css3动画实现,在组件的wxss里添加这段代码
.rotation {
-webkit-transform: rotate(360deg);
animation: rotation 12s linear infinite;
-moz-animation: rotation 12s linear infinite;
-webkit-animation: rotation 12s linear infinite;
-o-animation: rotation 12s linear infinite;
} @-webkit-keyframes rotation {
from {
-webkit-transform: rotate(0deg);
}
to {
-webkit-transform: rotate(360deg);
}
}
//在组件的wxml添加样式
<image src="..." class="{{playing?'rotation':''}}"/>

对Component和Model应用的理解

业务代码最好写在Model里面

多热合作的时候每个人写自己的Component,最后放到组件目录下调用就可以了

组件通信

方案一,利用页面做转发

小程序开发-10-新版Music组件、组件通信与wxss样式复用的更多相关文章

  1. 小程序开发-页面导航栏navigation-bar组件

    导航栏navigation-bar 页面导航条配置节点,用于指定导航栏的一些属性.只能是 page-meta 组件内的第一个节点,需要配合它一同使用. 通过这个节点可以获得类似于调用 wx.setNa ...

  2. 微信小程序开发-入门到熟练(wepy-初级篇)

    Title:最近做完了项目,review代码的同时,就想写一篇详细的小程序开发经历,记录自己的项目从0到1的过程 Desc : 小程序从0到1,从小白到完成项目,你需要这样做: step1: 基础知识 ...

  3. 微信小程序开发笔记02

    今天学习了微信小程序开发用到的语言,wxml与wxss语言基本语法与html和css基本语法相似,学习起来相对简单.在小程序主要的语言是js(javascript,跟准确的说是jqery) ,由于这种 ...

  4. 微信小程序开发03-这是一个组件

    编写组件 基本结构 接上文:微信小程序开发02-小程序基本介绍 我们今天先来实现这个弹出层: 之前这个组件是一个容器类组件,弹出层可设置载入的html结构,然后再设置各种事件即可,这种组件有一个特点: ...

  5. 微信小程序开发 [02] 页面注册和基本组件

    1.页面注册 既然我们希望跳转到新的页面,那自然要新建页面相关的文件才行.在开篇已经讲过,一个小程序页面由四个文件组成,假如我们的页面名为welcome,那么这四个文件则是: welcome.js w ...

  6. 微信小程序开发05-日历组件的实现

    接上文:微信小程序开发04-打造自己的UI库 github地址:https://github.com/yexiaochai/wxdemo 我们这里继续实现我们的日历组件,这个日历组件稍微有点特殊,算是 ...

  7. 【小程序】小程序开发自定义组件的步骤>>>>>>>>>小程序开发过程中报错:jsEnginScriptError

    报错:jsEnginScriptError VM6342: jsEnginScriptError Component is not found in path "component/spac ...

  8. 小程序开发-6个优秀的UI组件库

    微信小程序开发,当原生的控件不能满足我们时,可以尝试下面几个比较优秀的组件库. 1. WeUI WXSS WeUI WXSS是腾讯官方UI组件库WeUI的小程序版,提供了跟微信界面风格一致的用户体验. ...

  9. 【云开发】10分钟零基础学会做一个快递查询微信小程序,快速掌握微信小程序开发技能(轮播图、API请求)

    大家好,我叫小秃僧 这次分享的是10分钟零基础学会做一个快递查询微信小程序,快速掌握开发微信小程序技能. 这篇文章偏基础,特别适合还没有开发过微信小程序的童鞋,一些概念和逻辑我会讲细一点,尽可能用图说 ...

随机推荐

  1. Elasticsearch 架构原理

    为什么要学习架构? Elasticsearch的一些架构设计,对我们做性能调优.故障处理,具有非常重要的影响.下面将从Elasticsearch的准实时索引的实现.自动发现.rounting和repl ...

  2. 获取所有权windows目录所有权

    Takeown /r /f 盘符:\目录\目录 例如: Takeown /r /f C:\Windows\CSC

  3. 通过CXF,开发soap协议接口

    1. 引入cxf的jar包 pom文件里面直接增加依赖 < dependency> <groupId > junit</ groupId> <artifact ...

  4. January 29 2017 Week 5 Sunday

    In order to be irreplaceable one must always be different. 若想无可替代,必须与众不同. If all your skills or pers ...

  5. Java中多线程重复启动

    在面试时候经常被问到多线程的相关问题: 今天在测试的时候发现下面的代码会抛出异常: java.lang.IllegalThreadStateException public static void m ...

  6. 在switch中的case语句中声明变量编译出错的解决方案

    在switch中的case语句中声明变量编译的问题 先来看段代码,别管什么意思: : , j = ; ; i < ; i++) recive_phone[i] = msgbuf.text[i]; ...

  7. AtCoder Grand Contest

    一句话题解 QwQ主要是因为这篇文章写的有点长……有时候要找某一个题可能不是很好找,所以写了这个东西. 具体的题意.题解和代码可以再往下翻._(:з」∠)_ AGC 001 C:枚举中点/中边. D: ...

  8. [HNOI2007]紧急疏散EVACUATE

    嘟嘟嘟 看数据范围,第一反应觉得爆搜是不是能骗点分,但发现爆搜太难写了,于是就开始想想正解…… 正解大概猜到了是网络流,但是怎么把时间这个条件加入到图的内容中,却困扰了我好半天,总是感觉把这种不同维度 ...

  9. 安卓渗透测试工具Drozer学习笔记

    下载,并安装. pip安装即可,安装完成后可能会出现缺少twisted依赖库的问题 ➜ vul git:(master) ✗ drozer console connect drozer Server ...

  10. 几句代码简单实现IoC容器

    前言 最近在调试EasyNetQ代码的时候发现里面有一段代码,就是IoC容器的简单实现,跟着他的代码敲了一遍,发现了奇妙之处.当然也是因为我才疏学浅导致孤陋寡闻了.他的思路就是通过动态调用构造函数生成 ...