童年中的趣事是最最珍贵的。小时候,我们因为幼小无知而闹出了许多笑话,打开记忆的匣门,童年趣事便接踵而来。
做梦找到厕所,醒来尿床了
小时候穿着裆裤时,跟着小女孩跳皮筋
撒尿和泥,还玩的不亦乐乎
纠结自己要上清华还是北大,长大后发现想多了
用笔在自己胳膊上画手表,还舍不得洗掉
用放大镜烤蚂蚁(小时候居然那么残忍……)
老爸骑 28 自行车带我上街,忘了我已经先坐在后座上,偏腿上车,我就飞了出去…
听着这么一段小故事,或许都发现了这些虎事很有趣。
功能展示
- 首页-视频播放 (同时只能播放一个视频特性)
- 点赞
- 分享
- 回复 (二级页面尚未完善)
知识总结
1. 首页-视频播放 (实现统一时刻只能播放一个视频)
解决思路:无非就是找一个标识,作为全局变量去记录上次播放的视频。也可以使用循环的方式去实现,不过循环的方式非常的不友好,随着分页数据的加载回导致程序越来越慢!
方案实时:我使用的是** vuex **,不过也可以采取 ** Storage ** 本地存储的方式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| handleVideoPlay() { if (!this.playFlag) { this.ajaxVideoClick() } this.playFlag = true; const videoCtx = wx.createVideoContext('video-'+this.video.id) videoCtx.play() if(this.videoPlayId === -1){ this[VideoPlayId](this.video.id) return false } const videoCtx1 = wx.createVideoContext('video-'+this.videoPlayId) videoCtx1.pause() this[VideoPlayId](this.video.id) },
|
2. 分享功能
小程序如果想对外分享,必须在 page 里面定义 onShareAppMessage 函数,来配置页面分享转发相关的信息。
- 只有定义了此事件处理函数,右上角菜单才会显示 “转发” 按钮
- 用户点击转发按钮的时候会调用
- 此事件需要 return 一个 Object,用于自定义转发内容
一个页面可能会有多个分享,可以由插入的参数 options 来判断具体是由哪个位置进行分享,从而做不同的逻辑判断。
不过在 mpvue 中,需要把 onShareAppMessage 函数写在 export default { } 根节点中,与 methods 方法通级。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| onShareAppMessage(res) { return { title: '虎事小程序-' + this.video.auther, path: this.detaiUrl, imageUrl: this.video.img, success: function (shareTickets) { console.info(shareTickets + '成功'); }, fail: function (res) { console.log(res + '失败'); }, complete:function(res){ } } }
|
3. 带参数跳转
在微信小程序中,跳转有普通导航跳转和 tabar 跳转。在 mpvue 框架中进行跳转可以使用 ** a 标签 **去实现,也可以使用 ** wx.navigateTo() **。
1 2 3 4 5
| wx.navigateTo({ url: "pages/detail/main?id" + this.video.id });
this.videoId = this.$root.$mp.query.id;
|
4. 使用 scss 书写 css
首先需要安装 node-scss 和 scss-loader
1 2
| npm install scss-loader --save-dev npm install node-scss --save-dev
|
安装完毕就可以这样书写 css 代码了
1 2 3 4 5 6 7 8 9 10
| <style lang="scss" scoped> .video { margin-bottom: 10px; overflow: hidden; .video-img { overflow: hidden; width: 100%; } } </style>
|
如果安装完,** ** 嵌套的代码,不智能提示,及 ** {}** 有红色波浪线警告,可以采用如下解决方案。
在 VsCode 编辑器中,点击 文件-首选项-设置 增加一下几行配置即可。
1 2 3
| "files.associations": { "*.css": "scss" }
|
5.mpvue 中如何使用 vuex
在 pages 根目录下创建 stores 的目录,并且新建 3 个文件
1 2 3
| index.js mutation-types.js mutations.js
|
1 2 3 4 5 6 7
|
export const VideoPlayId = "VideoPlayId";
export const UserInfor = "UserInfor";
|
1 2 3 4 5 6 7 8 9 10 11 12
|
import { VideoPlayId, UserInfor } from "./mutation-types";
export default { [VideoPlayId](state, v) { state.videoPlayId = v; }, [UserInfor](state, v) { state.userInfo = v; }, };
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
import Vue from "vue"; import Vuex from "vuex";
import mutations from "./mutations";
Vue.use(Vuex);
const state = { videoPlayId: -1, userInfo: {}, };
export default new Vuex.Store({ state, mutations, });
|
绑定 Store 到 mpvue
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| import Vue from "vue"; import App from "./App";
import Store from "./stores";
Vue.config.productionTip = false; App.mpType = "app";
Vue.prototype.$store = Store;
const app = new Vue(App); app.$mount();
|
在使用的地方,需要吧 state 定义的变量,及触发的方法导出。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| <template> <div> <button :class="{logged: isLogged}" open-type="getUserInfo" :lang="zh_CN" @click="doLogin" >获取用户信息</button> </div> </template>
<script>
import { mapState, mapMutations } from 'vuex' import { UserInfor } from '@/stores/mutation-types'
import { get, showSuccess, showModal } from '@/utils/index' import qcloud from 'wafer2-client-sdk' import config from './../../config'
export default { data () { return { } },
computed:{ ...mapState([ 'userInfo' ]), isLogged () { return !!this.userInfo['openId']; } }, methods: {
...mapMutations([ UserInfor ]), doLogin(){ qcloud.login({ success: res => { this[UserInfor](res) }, fail: err => { this[UserInfor]({}) showModal('登录错误') } }) } } } </script>
<style scoped> .logged{ display: none; } </style>
|
作品展示