微信小程序之仿微信漂流瓶实例


Posted in Javascript onDecember 09, 2016

周末找事做做.看到微信里有个漂流瓶.试着敲了敲.

这里是用leancloud做后台.涉及到语音和文字的储存,查询.自己不会写后台代码,对于我算是个福利.

欢迎交流!

微信小程序之仿微信漂流瓶实例

下面带图说模块:

1.主页面

三个button.不多说了.别吐槽这画风.哈哈哈.

微信小程序之仿微信漂流瓶实例

2.编辑漂流瓶内容

内容可以是语音,也可以是文字.随意切换.

微信小程序之仿微信漂流瓶实例

这里是语音的.录音完成后直接扔出去.

微信小程序之仿微信漂流瓶实例

3.捡一个漂流瓶

有两种情况.一是没有捡到.就是一个海星;二是捡到了.语音或者是文字.

1.海星

微信小程序之仿微信漂流瓶实例

2.捡到了漂流瓶

微信小程序之仿微信漂流瓶实例

2.1  获取到文字.弹框显示文字

微信小程序之仿微信漂流瓶实例

2.2 获取到语音.直接播放

微信小程序之仿微信漂流瓶实例

3.我的瓶子

语音和文字两类.

微信小程序之仿微信漂流瓶实例

下面上代码:

1.index.wxml

<!--index.wxml--> 
<view class="play-style"> 
 <view class="playstyle"> 
 <image class="img" src="{{getSrc}}" bindtap="get"></image> 
 <text>捡一个</text> 
 </view> 
 <view class="leftstyle"> 
 <image class="img" src="{{throwSrc}}" bindtap="throw"></image> 
 <text>扔一个</text> 
 </view> 
 <view class="rightstyle"> 
 <image class="img" src="{{mySrc}}" bindtap="mine"></image> 
 <text>我的瓶子</text> 
 </view> 
</view>

 2.index.wxss

/**index.wxss**/ 
 
page { 
 background-image: url('http://ac-nfyusptg.clouddn.com/0ee678402f996ad3a5c2.gif'); 
 background-attachment: fixed; 
 background-repeat: no-repeat; 
 background-size: cover; 
} 
 
.play-style { 
 position: fixed; 
 bottom: 50rpx; 
 left: 0; 
 height: 240rpx; 
 width: 100%; 
 text-align: center; 
 color: #fff; 
} 
 
.playstyle { 
 position: absolute; 
 width: 160rpx; 
 height: 160rpx; 
 top: 10rpx; 
 left: 295rpx; 
} 
 
.leftstyle { 
 position: absolute; 
 width: 160rpx; 
 height: 160rpx; 
 top: 10rpx; 
 left: 67.5rpx; 
} 
 
.rightstyle { 
 position: absolute; 
 width: 160rpx; 
 height: 160rpx; 
 top: 10rpx; 
 right: 67.5rpx; 
} 
 
.img { 
 width: 160rpx; 
 height: 160rpx; 
}

3.index.js

//index.js 
//获取应用实例 
var app = getApp() 
const AV = require('../../utils/av-weapp.js'); 
Page({ 
 data: { 
 getSrc: "../../images/a.png",//捡一个 
 throwSrc: "../../images/b.png",//扔一个 
 mySrc: "../../images/c.png"//我的 
 }, 
 onLoad: function () { 
 const user = AV.User.current(); 
 // 调用小程序 API,得到用户信息 
 wx.getUserInfo({ 
  success: ({userInfo}) => { 
  console.log(userInfo) 
  // 更新当前用户的信息 
  user.set(userInfo).save().then(user => { 
   // 成功,此时可在控制台中看到更新后的用户信息 
   this.globalData.user = user.toJSON(); 
  }).catch(console.error); 
  } 
 }); 
 }, 
 //捡一个 
 get: function () { 
 console.log("捡一个") 
 //随机去后台拉取一个录音 
 wx.navigateTo({ 
  url: '../get/get', 
  success: function (res) { 
  // success 
  }, 
  fail: function () { 
  // fail 
  }, 
  complete: function () { 
  // complete 
  } 
 }) 
 }, 
 //扔一个 
 throw: function () { 
 console.log("扔一个") 
 wx.navigateTo({ 
  url: '../write/write', 
  success: function (res) { 
  // success 
  }, 
  fail: function () { 
  // fail 
  }, 
  complete: function () { 
  // complete 
  } 
 }) 
 }, 
 //我的瓶子 
 mine: function () { 
 console.log("我的瓶子") 
 wx.navigateTo({ 
  url: '../mine/mine', 
  success: function (res) { 
  // success 
  }, 
  fail: function () { 
  // fail 
  }, 
  complete: function () { 
  // complete 
  } 
 }) 
 } 
})

 4.write.js

//index.js 
//获取应用实例 
var app = getApp() 
const AV = require('../../utils/av-weapp.js'); 
Page({ 
 data: { 
 getSrc: "../../images/a.png",//捡一个 
 throwSrc: "../../images/b.png",//扔一个 
 mySrc: "../../images/c.png"//我的 
 }, 
 onLoad: function () { 
 const user = AV.User.current(); 
 // 调用小程序 API,得到用户信息 
 wx.getUserInfo({ 
  success: ({userInfo}) => { 
  console.log(userInfo) 
  // 更新当前用户的信息 
  user.set(userInfo).save().then(user => { 
   // 成功,此时可在控制台中看到更新后的用户信息 
   this.globalData.user = user.toJSON(); 
  }).catch(console.error); 
  } 
 }); 
 }, 
 //捡一个 
 get: function () { 
 console.log("捡一个") 
 //随机去后台拉取一个录音 
 wx.navigateTo({ 
  url: '../get/get', 
  success: function (res) { 
  // success 
  }, 
  fail: function () { 
  // fail 
  }, 
  complete: function () { 
  // complete 
  } 
 }) 
 }, 
 //扔一个 
 throw: function () { 
 console.log("扔一个") 
 wx.navigateTo({ 
  url: '../write/write', 
  success: function (res) { 
  // success 
  }, 
  fail: function () { 
  // fail 
  }, 
  complete: function () { 
  // complete 
  } 
 }) 
 }, 
 //我的瓶子 
 mine: function () { 
 console.log("我的瓶子") 
 wx.navigateTo({ 
  url: '../mine/mine', 
  success: function (res) { 
  // success 
  }, 
  fail: function () { 
  // fail 
  }, 
  complete: function () { 
  // complete 
  } 
 }) 
 } 
})

5.get.js

//get.js 
//获取应用实例 
var app = getApp() 
const AV = require('../../utils/av-weapp.js'); 
Page({ 
 data: { 
 getPngSecond: "http://ac-ejx0nsfy.clouddn.com/6f50e35237db20a4edd6.png",//海星 
 getPngThrid: "http://ac-ejx0nsfy.clouddn.com/15070f4f33bb6090ec1b.png",//漂流瓶 
 isGet: true,//是否捡到了漂流瓶 
 maskDisplay: 'none', 
 slideAnimation: {}, 
 slideHeight: 0, 
 slideRight: 0, 
 slideWidth: 0, 
 isPlaying: false, 
 plp: [], 
 j: 1, 
 contentText: '' 
 }, 
 onLoad: function () { 
 var _this = this; 
 //获取屏幕宽高 
 wx.getSystemInfo({ 
  success: function (res) { 
  var windowWidth = res.windowWidth; 
  var windowHeight = res.windowHeight; 
  console.log('windowWidth: ' + windowWidth) 
  console.log('windowHeight: ' + windowHeight) 
  _this.setData({ 
   imageWidth: windowWidth, 
   imageHeight: windowHeight, 
   slideHeight: res.windowHeight * 0.6, 
   slideRight: res.windowWidth, 
   slideWidth: res.windowWidth * 0.80 
  }) 
  } 
 }) 
 var num = Math.round(Math.random() * 9 + 1); 
 console.log(num) 
 if (num > 5) { 
  //捡到漂流瓶 
  this.setData({ 
  bgPng: this.data.getPngThrid, 
  isGet: true 
  }) 
 } else { 
  //海星 
  this.setData({ 
  bgPng: this.data.getPngSecond, 
  isGet: false 
  }) 
 } 
 
 //去后台拉取漂流瓶数据,1.获取到文字,左边弹框;2.获取到语音,播放 
 //1.获取语音 
 var _this = this; 
 //获取语音漂流瓶 
 var queryRecord = new AV.Query('_File'); 
 queryRecord.find().then(function (myrecord) { 
  console.log(myrecord); 
  var audio = [] 
  for (var i = 0; i < myrecord.length; i++) { 
  //判断上传用户身份 
  if (myrecord[i].attributes.name == 'myRecord_dzp') { 
   _this.data.plp = _this.data.plp.concat(myrecord[i].attributes.url); 
  } 
  console.log(myrecord[i].attributes.url); 
  } 
 }).catch(function (error) { 
  alert(JSON.stringify(error)); 
 }); 
 
 //2.获取文本 
 var queryText = new AV.Query('TodoFolder'); 
 // 查询 name 是 myText 的漂流瓶内容 
 queryText.equalTo('name', 'myText'); 
 queryText.find().then(function (results) { 
  var mytext = [] 
  for (var i = 0; i < results.length; i++) { 
  var query = new AV.Query('TodoFolder'); 
  console.log(results[i].id) 
  query.get(results[i].id).then(function (todo) { 
   // 成功获得实例 
   // data 就是 id 为 57328ca079bc44005c2472d0 的 TodoFolder 对象实例 
   console.log( 
   todo.attributes.plp_content 
   ) 
   _this.data.plp = _this.data.plp.concat(todo.attributes.plp_content); 
  }, function (error) { 
   // 异常处理 
  }); 
  } 
 
 }, function (error) { 
 }); 
 
 
 /** 
 * 监听音乐停止 
 */ 
 wx.onBackgroundAudioStop(function () { 
  console.log('onBackgroundAudioStop') 
  _this.setData({ 
  isPlaying: false 
  }) 
  clearInterval(_this.timer) 
 }) 
 }, 
 onReady: function () { 
 // 标题栏 
 wx.setNavigationBarTitle({ 
  title: '捡一个' 
 }) 
 }, 
 //右上角关闭按钮 
 onClick: function () { 
 var _this = this; 
 //捡到海星,return 
 if (!this.data.isGet) return 
 this.setData({ 
  isGet: false 
 }) 
 console.log("打开漂流瓶") 
 //随机获取一个索引 
 var index = parseInt(Math.random() * this.data.plp.length) 
 var content = this.data.plp[index] 
 if (content.indexOf("http://") == 0) { 
  wx.playBackgroundAudio({ 
  dataUrl: _this.data.plp[index], 
  title: _this.data.plp[index], 
  coverImgUrl: '' 
  }) 
  playRecord.call(_this) 
 } else { 
  _this.setData({ 
  contentText: content 
  }) 
  slideUp.call(_this); 
 } 
 }, 
 //遮罩点击 侧栏关闭 
 slideCloseEvent: function () { 
 slideDown.call(this); 
 } 
}) 
 
//侧栏展开 
function slideUp() { 
 var animation = wx.createAnimation({ 
 duration: 600 
 }); 
 this.setData({ maskDisplay: 'block' }); 
 animation.translateX('110%').step(); 
 this.setData({ 
 slideAnimation: animation.export() 
 }); 
} 
 
//侧栏关闭 
function slideDown() { 
 var animation = wx.createAnimation({ 
 duration: 800 
 }); 
 animation.translateX('-110%').step(); 
 this.setData({ 
 slideAnimation: animation.export() 
 }); 
 this.setData({ maskDisplay: 'none' }); 
} 
 
//播放动画 
function playRecord() { 
 var _this = this; 
 this.setData({ 
 isPlaying: true 
 }) 
 //话筒帧动画 
 var i = 1; 
 this.timer = setInterval(function () { 
 i++; 
 i = i % 5; 
 _this.setData({ 
  j: i 
 }) 
 }, 200); 
}

6.mine.js

//mine.js 
//获取应用实例 
var app = getApp() 
const AV = require('../../utils/av-weapp.js'); 
Page({ 
 data: { 
 audio: [],//录音集合 
 mytext: [],//文本集合 
 isPlaying: false,//是否在播放语音 
 }, 
 onLoad: function () { 
 var _this = this; 
 //获取语音漂流瓶 
 var queryRecord = new AV.Query('_File'); 
 queryRecord.find().then(function (myrecord) { 
  console.log(myrecord); 
  var audio = [] 
  for (var i = 0; i < myrecord.length; i++) { 
  //判断上传用户身份 
  if (myrecord[i].attributes.name == 'myRecord_dzp') { 
   _this.data.audio = _this.data.audio.concat(myrecord[i].attributes.url); 
  } 
  console.log(myrecord[i].attributes.url); 
  } 
 }).catch(function (error) { 
  alert(JSON.stringify(error)); 
 }); 
 //获取文本漂流瓶 
 var queryText = new AV.Query('TodoFolder'); 
 // 查询 name 是 myText 的漂流瓶内容 
 queryText.equalTo('name', 'myText'); 
 queryText.find().then(function (results) { 
  var mytext = [] 
  for (var i = 0; i < results.length; i++) { 
  var query = new AV.Query('TodoFolder'); 
  console.log(results[i].id) 
  query.get(results[i].id).then(function (todo) { 
   // 成功获得实例 
   // data 就是 id 为 57328ca079bc44005c2472d0 的 TodoFolder 对象实例 
   console.log( 
   todo.attributes.plp_content 
   ) 
 
   _this.data.mytext = _this.data.mytext.concat(todo.attributes.plp_content); 
   // console.log(_this.data.mytext) 
  }, function (error) { 
   // 异常处理 
  }); 
  } 
 
 }, function (error) { 
 }); 
 
 
 /** 
 * 监听音乐停止 
 */ 
 wx.onBackgroundAudioStop(function () { 
  console.log('onBackgroundAudioStop') 
  _this.setData({ 
  isPlaying: false 
  }) 
  clearInterval(_this.timer) 
 }) 
 
 }, 
 onReady: function () { 
 // 标题栏 
 wx.setNavigationBarTitle({ 
  title: '我的瓶子' 
 }) 
 }, 
 //弹框显示文本内容 
 gotoDisplay: function (e) { 
 this.setData({ 
  isPlaying: false 
 }) 
 clearInterval(this.timer) 
 //数组索引 
 var index = e.currentTarget.dataset.key; 
 wx.showModal({ 
  title: '内容', 
  content: this.data.mytext[index], 
  showCancel: false, 
  success: function (res) { 
  if (res.confirm) { 
   console.log('用户点击确定') 
  } 
  } 
 }) 
 }, 
 //播放音频 
 gotoPlay: function (e) { 
 var index = e.currentTarget.dataset.key; 
 console.log(this.data.audio[index]) 
 //开启播放动画 
 playRecord.call(this) 
 wx.playBackgroundAudio({ 
  dataUrl: this.data.audio[index], 
  title: this.data.audio[index], 
  coverImgUrl: '' 
 }) 
 } 
}) 
 
 
//播放动画 
function playRecord() { 
 var _this = this; 
 this.setData({ 
 isPlaying: true 
 }) 
 //话筒帧动画 
 var i = 1; 
 this.timer = setInterval(function () { 
 i++; 
 i = i % 5; 
 _this.setData({ 
  j: i 
 }) 
 }, 200); 
}

数据的增删改查请看leancloud文档.

demo下载:demo

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript编程起步(第七课)
Jan 10 Javascript
jQuery中获取Radio元素值的方法
Jul 02 Javascript
深入理解javascript构造函数和原型对象
Sep 23 Javascript
JavaScript onkeydown事件入门实例(键盘某个按键被按下)
Oct 17 Javascript
jQuery中unwrap()方法用法实例
Jan 16 Javascript
详解AngularJS验证、过滤器、指令
Jan 04 Javascript
微信小程序本作用域下调用全局JS详解及实例
Feb 22 Javascript
微信小程序 图片绝对定位(背景图片)
Apr 05 Javascript
实现一个完整的Node.js RESTful API的示例
Sep 29 Javascript
vuejs选中当前样式active的实例
Aug 22 Javascript
javascript移动端 电子书 翻页效果实现代码
Sep 07 Javascript
Vue+Element UI实现概要小弹窗的全过程
May 30 Vue.js
JS判断是否手机或pad访问实现方法
Dec 09 #Javascript
js实现一个可以兼容PC端和移动端的div拖动效果实例
Dec 09 #Javascript
利用JS实现页面删除并重新排序功能
Dec 09 #Javascript
Bootstrap table使用方法详细介绍
Dec 09 #Javascript
jQuery Validate设置onkeyup验证的实例代码
Dec 09 #Javascript
任意Json转成无序列表的方法示例
Dec 09 #Javascript
利用jQuery.Validate异步验证用户名是否存在(推荐)
Dec 09 #Javascript
You might like
Terran兵种介绍
2020/03/14 星际争霸
php 魔术方法使用说明
2009/10/20 PHP
php获得客户端浏览器名称及版本的方法(基于ECShop函数)
2015/12/23 PHP
PHP编程入门的基本语法知识点总结
2016/01/26 PHP
PHP session会话操作技巧小结
2016/09/27 PHP
ThinkPHP5.0多个文件上传后找不到临时文件的修改方法
2018/07/30 PHP
关于PHP虚拟主机概念及如何选择稳定的PHP虚拟主机
2018/11/20 PHP
Laravel5.4框架中视图共享数据的方法详解
2019/09/05 PHP
laravel请求参数校验方法
2019/10/10 PHP
使用JQuery和CSS模拟超链接的用户单击事件的实现代码
2012/05/23 Javascript
指定区域的图片自动按比例缩小的js代码(防止页面被图片撑破)
2014/02/21 Javascript
nodejs中使用monk访问mongodb
2014/07/06 NodeJs
JavaScript定时器和优化的取消定时器方法
2015/07/03 Javascript
javascript数组对象常用api函数小结(连接,插入,删除,反转,排序等)
2016/09/20 Javascript
bootstrap响应式表格实例详解
2017/05/15 Javascript
vue的安装及element组件的安装方法
2018/03/09 Javascript
node实现登录图片验证码的示例代码
2018/04/20 Javascript
vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
2018/10/31 Javascript
Vue实现简单计算器案例
2020/02/25 Javascript
vue缓存之keep-alive的理解和应用详解
2020/11/02 Javascript
python魔法方法-自定义序列详解
2016/07/21 Python
python subprocess 杀掉全部派生的子进程方法
2017/01/16 Python
Python Xml文件添加字节属性的方法
2018/03/31 Python
python 获得任意路径下的文件及其根目录的方法
2019/02/16 Python
python使用requests模块实现爬取电影天堂最新电影信息
2019/04/03 Python
python学生管理系统的实现
2020/04/05 Python
Python绘制动态水球图过程详解
2020/06/03 Python
解析Tensorflow之MNIST的使用
2020/06/30 Python
HTML5离线缓存在tomcat下部署可实现图片flash等离线浏览
2012/12/13 HTML / CSS
高中生自我鉴定范文
2013/10/30 职场文书
《最后的姿势》教学反思
2014/02/27 职场文书
四风问题查摆剖析材料
2014/10/11 职场文书
浪漫婚礼主持词开场白
2015/11/24 职场文书
Python自动化测试PO模型封装过程详解
2021/06/22 Python
Python requests用法和django后台处理详解
2022/03/19 Python
青岛市的收音机研制与生产
2022/04/07 无线电