微信小程序开发之视频播放器 Video 弹幕 弹幕颜色自定义

把录音的模块尝试过之后就想着微信小程序的视频播放会不会更有趣?

果然,微信小程序视频自带弹幕.是不是很爽,跟我一起来看看.

微信小程序开发之录音机 音频播放 动画 (真机可用)

先上gif:



再上几张图:

1.视频播放器


2.选择弹幕颜色


3.弹幕来了...



1.视频播放器

微信已经封装的非常好.我这里只用了很简单的几个属性

由于以前没做过弹幕,看到danmu-list就激动了.而且只需要将弹幕内容加入集合即可.

弹幕列表的元素:

 {
        text: '第 1s 出现的红色弹幕',//文本
        color: '#ff0000',//颜色
        time: 1//发送的时间
      }

其他的属性就不说了,以后遇到再细细研究.



2.选择弹幕颜色

从上面的弹幕列表元素可以看出,微信并没有给开发者太多的自定义空间.文本?时间?颜色?

也就颜色还能玩出点花样吧.

于是我就简单的做了个常用颜色的列表.算是自定义弹幕颜色吧


上代码:

ps:代码没整理,很烂,凑活着看吧.

1.index.wxml

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <!--index.wxml-->  
  2. <view class="section tc">  
  3.   <video id="myVideo" style="height:{{videoHeight}}px;width:{{videoWidth}}px" src="http://wxsnsdy.tc.qq.com/105/20210/snsdyvideodownload?filekey=30280201010421301f0201690402534804102ca905ce620b1241b726bc41dcff44e00204012882540400&bizid=1023&hy=SH&fileparam=302c020101042530230204136ffd93020457e3c4ff02024ef202031e8d7f02030f42400204045a320a0201000400" binderror="videoErrorCallback" danmu-list="{{danmuList}}" enable-danmu danmu-btn controls></video>  
  4.   <view class="btn-area">  
  5.      <view class="weui-cell weui-cell_input">  
  6.                 <view class="weui-cell__bd">  
  7.                     <input class="weui-input" placeholder="请输入弹幕" bindblur="bindInputBlur" />  
  8.                 </view>  
  9.             </view>  
  10.     
  11.     <button style="margin:30rpx;" bindtap="bindSendDanmu">发送弹幕</button>  
  12.   </view>  
  13. </view>  
  14.       <view class="weui-cells weui-cells_after-title">  
  15.             <view class="weui-cell weui-cell_switch">  
  16.                 <view class="weui-cell__bd">随机颜色</view>  
  17.                 <view class="weui-cell__ft">  
  18.                     <switch checked bindchange="switchChange" />  
  19.                 </view>  
  20.    </view>  
  21. <view class="colorstyle"  bindtap="selectColor">  
  22. <text>选择颜色</text>  
  23. <view style="height:80rpx;width:80rpx;line-height: 100rpx;margin:10rpx;background-color:{{numberColor}}"></view>  
  24. </view>  


2.index.wxss

(从别的项目粘过来的.哈哈)

[css]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. /**index.wxss**/  
  2. .weui-cells {  
  3.   positionrelative;  
  4.   margin-top1.17647059em;  
  5.   background-color#FFFFFF;  
  6.   line-height1.41176471;  
  7.   font-size17px;  
  8. }  
  9. .weui-cells:before {  
  10.   content" ";  
  11.   positionabsolute;  
  12.   left: 0;  
  13.   top: 0;  
  14.   right: 0;  
  15.   height1px;  
  16.   border-top1rpx solid #D9D9D9;  
  17.   color#D9D9D9;  
  18.     
  19. }  
  20. .weui-cells:after {  
  21.   content" ";  
  22.   positionabsolute;  
  23.   left: 0;  
  24.   bottom: 0;  
  25.   right: 0;  
  26.   height1px;  
  27.   border-bottom1rpx solid #D9D9D9;  
  28.   color#D9D9D9;  
  29. }  
  30. .weui-cells_after-title {  
  31.   margin-top0;  
  32. }  
  33. .weui-cell__bd {  
  34.   -webkit-box-flex: 1;  
  35.   -webkit-flex: 1;  
  36.           flex: 1;  
  37. }  
  38. .weui-cell__ft {  
  39.   text-alignright;  
  40.   color#999999;  
  41. }  
  42.   
  43. .weui-cell {  
  44.   padding10px 10px;  
  45.   positionrelative;  
  46.   display: -webkit-box;  
  47.   display: -webkit-flex;  
  48.   display: flex;  
  49.   -webkit-box-align: center;  
  50.   -webkit-align-items: center;  
  51.           align-items: center;  
  52. }  
  53. .weui-cell:before {  
  54.   content" ";  
  55.   positionabsolute;  
  56.   top: 0;  
  57.   right: 0;  
  58.   height1px;  
  59.   border-top1rpx solid #D9D9D9;  
  60.   color#D9D9D9;  
  61.   left: 15px;  
  62. }  
  63. .weui-cell:first-child:before {  
  64.   displaynone;  
  65. }  
  66. .colorstyle{  
  67.     border-top2px solid #eee;  
  68.     border-bottom2px solid #eee;  
  69.     padding-left10px;  
  70.     padding-right10px;  
  71.     font-size17px;  
  72.     line-height100rpx;  
  73.     display: flex;  
  74.     flex-direction: row;  
  75.     justify-content:space-between;  
  76. }  


3.index.js


[javascript]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. //index.js  
  2. function getRandomColor() {  
  3.   let rgb = []  
  4.   for (let i = 0; i < 3; ++i) {  
  5.     let color = Math.floor(Math.random() * 256).toString(16)  
  6.     color = color.length == 1 ? '0' + color : color  
  7.     rgb.push(color)  
  8.   }  
  9.   return '#' + rgb.join('')  
  10. }  
  11.   
  12. Page({  
  13.   onLoad: function () {  
  14.     var _this = this;  
  15.     //获取屏幕宽高    
  16.     wx.getSystemInfo({  
  17.       success: function (res) {  
  18.         var windowWidth = res.windowWidth;  
  19.         //video标签认宽度300px、高度225px,设置宽高需要通过wxss设置width和height。  
  20.         var videoHeight = (225 / 300) * windowWidth//屏幕高宽比    
  21.         console.log('videoWidth: ' + windowWidth)  
  22.         console.log('videoHeight: ' + videoHeight)  
  23.         _this.setData({  
  24.           videoWidth: windowWidth,  
  25.           videoHeight: videoHeight  
  26.         })  
  27.       }  
  28.     })  
  29.   },  
  30.   onReady: function (res) {  
  31.     this.videoContext = wx.createVideoContext('myVideo')  
  32.   },  
  33.   onShow: function () {  
  34.     var _this = this;  
  35.     //获取年数  
  36.     wx.getStorage({  
  37.       key: 'numberColor',  
  38.       success: function (res) {  
  39.         console.log(res.data + "numberColor----")  
  40.         _this.setData({  
  41.           numberColor: res.data,  
  42.         })  
  43.       }  
  44.     })  
  45.   },  
  46.   inputValue: '',  
  47.   data: {  
  48.     isRandomColor: true,//默认随机  
  49.     src: '',  
  50.     numberColor: "#ff0000",//默认黑色  
  51.   
  52.     danmuList: [  
  53.       {  
  54.         text: '第 1s 出现的红色弹幕',  
  55.         color: '#ff0000',  
  56.         time: 1  
  57.       },  
  58.       {  
  59.         text: '第 2s 出现的绿色弹幕',  
  60.         color: '#00ff00',  
  61.         time: 2  
  62.       }  
  63.     ]  
  64.   },  
  65.   bindInputBlur: function (e) {  
  66.     this.inputValue = e.detail.value  
  67.   },  
  68.   bindSendDanmu: function () {  
  69.     if (this.data.isRandomColor) {  
  70.       var color = getRandomColor();  
  71.     } else {  
  72.       var color = this.data.numberColor;  
  73.     }  
  74.   
  75.     this.videoContext.sendDanmu({  
  76.       text: this.inputValue,  
  77.       color: color  
  78.     })  
  79.   },  
  80.   videoErrorCallback: function (e) {  
  81.     console.log('视频错误信息:')  
  82.     console.log(e.detail.errMsg)  
  83.   },  
  84.   //选择颜色页面  
  85.   selectColor: function () {  
  86.     wx.navigateTo({  
  87.       url: '../selectColor/selectColor',  
  88.       success: function (res) {  
  89.         // success  
  90.       },  
  91.       fail: function () {  
  92.         // fail  
  93.       },  
  94.       complete: function () {  
  95.         // complete  
  96.       }  
  97.     })  
  98.   },  
  99.   //switch是否选中  
  100.   switchChange: function (e) {  
  101.     this.setData({  
  102.       isRandomColor: e.detail.value  
  103.     })  
  104.   }  
  105. })  


4.selectColor.wxml

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <span style="font-size:24px;"><!--selectColor.wxml-->  
  2. <view class="page">  
  3.     <view class="page__bd">  
  4.         <view class="weui-grids">  
  5.             <block wx:for-items="{{color}}"  >  
  6.                 <view  class="weui-grid"  data-number="{{item.number}}" bindtap="selectColor" >  
  7.                     <view class="weui-grid__icon"  style="background:{{item.number}}"/>  
  8.                 </view>  
  9.             </block>  
  10.         </view>  
  11.     </view>  
  12. </view></span>  


5.selectColor.wxss


[css]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. /**selectColor.wxss**/  
  2. .weui-grids {  
  3.   border-top1rpx solid #D9D9D9;  
  4.   border-left1rpx solid #D9D9D9;  
  5. }  
  6. .weui-grid {  
  7.   positionrelative;  
  8.   floatleft;  
  9.   padding20rpx 20rpx;  
  10.   width20%;  
  11.   box-sizing: border-box;  
  12.   border-right1rpx solid #D9D9D9;  
  13.   border-bottom1rpx solid #D9D9D9;  
  14. }  
  15. .weui-grid_active {  
  16.   background-color#ccc;  
  17. }  
  18. .weui-grid__icon {  
  19.   displayblock;  
  20.   width100rpx;  
  21.   height100rpx;  
  22.   margin0 auto;  
  23.  box-shadow: 3px 3px 5px #bbb;  
  24.      
  25. }  
  26. .weui-grid__label {  
  27.   margin-top5px;  
  28.   displayblock;  
  29.   text-aligncenter;  
  30.   color#000000;  
  31.   font-size14px;  
  32.   white-spacenowrap;  
  33.   text-overflow: ellipsis;  
  34.   overflowhidden;  
  35. }  

6.selectColor.js


[javascript]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. /selectColor.js  
  2. //获取应用实例  
  3. var app = getApp()  
  4. Page({  
  5.   data: {  
  6.     color: [  
  7.       { key: 1, color: ' 白色 ', number: '#FFFFFF' },  
  8.   
  9.       { key: 2, color: ' 红色 ', number: '#FF0000' },  
  10.   
  11.       { key: 3, color: ' 绿色 ', number: '#00FF00' },  
  12.   
  13.       { key: 4, color: ' 蓝色 ', number: '#0000FF' },  
  14.   
  15.       { key: 5, color: ' 牡丹红 ', number: '#FF00FF' },  
  16.   
  17.       { key: 6, color: ' 青色 ', number: '#00FFFF' },  
  18.   
  19.       { key: 7, color: ' 黄色 ', number: '#FFFF00' },  
  20.   
  21.       { key: 8, color: ' 黑色 ', number: '#000000' },  
  22.   
  23.       { key: 9, color: ' 海蓝 ', number: '#70DB93' },  
  24.   
  25.       { key: 10, color: ' 巧克力色 ', number: '#5C3317' },  
  26.   
  27.       { key: 11, color: ' 蓝紫色 ', number: '#9F5F9F' },  
  28.   
  29.       { key: 12, color: ' 黄铜色 ', number: '#B5A642' },  
  30.   
  31.       { key: 13, color: ' 亮金色 ', number: '#D9D919' },  
  32.   
  33.       { key: 14, color: ' 棕色 ', number: '#A67D3D' },  
  34.   
  35.       { key: 15, color: ' 青铜色 ', number: '#8C7853' },  
  36.   
  37.       { key: 16, color: ' 2号青铜色 ', number: '#A67D3D' },  
  38.   
  39.       { key: 17, color: ' 士官服蓝色 ', number: '#5F9F9F' },  
  40.   
  41.       { key: 18, color: ' 冷铜色 ', number: '#D98719' },  
  42.   
  43.       { key: 19, color: ' 铜色 ', number: '#B87333' },  
  44.   
  45.       { key: 20, color: ' 珊瑚红 ', number: '#FF7F00' },  
  46.   
  47.       { key: 21, color: ' 紫蓝色 ', number: '#42426F' },  
  48.   
  49.       { key: 22, color: ' 深棕 ', number: '#5C4033' },  
  50.   
  51.       { key: 23, color: ' 深绿 ', number: '#2F4F2F' },  
  52.   
  53.       { key: 24, color: ' 深铜绿色 ', number: '#4A766E' },  
  54.   
  55.       { key: 25, color: ' 深橄榄绿 ', number: '#4F4F2F' },  
  56.   
  57.       { key: 26, color: ' 深兰花色 ', number: '#9932CD' },  
  58.   
  59.       { key: 27, color: ' 深紫色 ', number: '#871F78' },  
  60.   
  61.       { key: 28, color: ' 深石板蓝 ', number: '#6B238E' },  
  62.   
  63.       { key: 29, color: ' 深铅灰色 ', number: '#2F4F4F' },  
  64.   
  65.       { key: 30, color: ' 深棕褐色 ', number: '#97694F' },  
  66.   
  67.       { key: 32, color: ' 深绿松石色 ', number: '#7093DB' },  
  68.   
  69.       { key: 33, color: ' 暗木色 ', number: '#855E42' },  
  70.   
  71.       { key: 34, color: ' 淡灰色 ', number: '#545454' },  
  72.   
  73.       { key: 35, color: ' 土灰玫瑰红色 ', number: '#856363' },  
  74.   
  75.       { key: 36, color: ' 长石色 ', number: '#D19275' },  
  76.   
  77.       { key: 37, color: ' 火砖色 ', number: '#8E2323' },  
  78.   
  79.       { key: 38, color: ' 森林绿 ', number: '#238E23' },  
  80.   
  81.       { key: 39, color: ' 金色 ', number: '#CD7F32' },  
  82.   
  83.       { key: 40, color: ' 鲜黄色 ', number: '#DBDB70' },  
  84.   
  85.       { key: 41, color: ' 灰色 ', number: '#C0C0C0' },  
  86.   
  87.       { key: 42, color: ' 铜绿色 ', number: '#527F76' },  
  88.   
  89.       { key: 43, color: ' 青黄色 ', number: '#93DB70' },  
  90.   
  91.       { key: 44, color: ' 猎人绿 ', number: '#215E21' },  
  92.   
  93.       { key: 45, color: ' 印度红 ', number: '#4E2F2F' },  
  94.   
  95.       { key: 46, color: ' 土黄色 ', number: '#9F9F5F' },  
  96.   
  97.       { key: 47, color: ' 浅蓝色 ', number: '#C0D9D9' },  
  98.   
  99.       { key: 48, color: ' 浅灰色 ', number: '#A8A8A8' },  
  100.   
  101.       { key: 49, color: ' 浅钢蓝色 ', number: '#8F8FBD' },  
  102.   
  103.       { key: 59, color: ' 浅木色 ', number: '#E9C2A6' },  
  104.   
  105.       { key: 60, color: ' 石灰绿色 ', number: '#32CD32' },  
  106.   
  107.       { key: 61, color: ' 桔黄色 ', number: '#E47833' },  
  108.   
  109.       { key: 62, color: ' 褐红色 ', number: '#8E236B' },  
  110.   
  111.       { key: 63, color: ' 中海蓝色 ', number: '#32CD99' },  
  112.   
  113.       { key: 64, color: ' 中蓝色 ', number: '#3232CD' },  
  114.   
  115.       { key: 65, color: ' 中森林绿 ', number: '#6B8E23' },  
  116.   
  117.       { key: 66, color: ' 中鲜黄色 ', number: '#EAEAAE' },  
  118.   
  119.       { key: 67, color: ' 中兰花色 ', number: '#9370DB' },  
  120.   
  121.       { key: 68, color: ' 中海绿色 ', number: '#426F42' },  
  122.   
  123.       { key: 69, color: ' 中石板蓝色 ', number: '#7F00FF' },  
  124.   
  125.       { key: 70, color: ' 中春绿色 ', number: '#7FFF00' },  
  126.   
  127.       { key: 71, color: ' 中绿松石色 ', number: '#70DBDB' },  
  128.   
  129.       { key: 72, color: ' 中紫红色 ', number: '#DB7093' },  
  130.   
  131.       { key: 73, color: ' 中木色 ', number: '#A68064' },  
  132.   
  133.       { key: 74, color: ' 深藏青色 ', number: '#2F2F4F' },  
  134.   
  135.       { key: 75, color: ' 海军蓝 ', number: '#23238E' },  
  136.   
  137.       { key: 76, color: ' 霓虹篮 ', number: '#4D4DFF' },  
  138.   
  139.       { key: 77, color: ' 霓虹粉红 ', number: '#FF6EC7' },  
  140.   
  141.       { key: 78, color: ' 新深藏青色 ', number: '#00009C' },  
  142.   
  143.       { key: 79, color: ' 新棕褐色 ', number: '#EBC79E' },  
  144.   
  145.       { key: 80, color: ' 暗金黄色 ', number: '#CFB53B' },  
  146.   
  147.       { key: 81, color: ' 橙色 ', number: '#FF7F00' },  
  148.     ],  
  149.   },  
  150.   
  151.   onLoad: function () {  
  152.   
  153.   },  
  154.   //点击后关闭选色页面  
  155.   selectColor: function (e) {  
  156.     var number = e.currentTarget.dataset.number;  
  157.     console.log("number: " + number)  
  158.     try {  
  159.       wx.setStorageSync('numberColor', number)  
  160.     } catch (e) {  
  161.     }  
  162.     wx.navigateBack({  
  163.       delta: 1, // 回退前 delta(默认为1) 页面  
  164.       success: function (res) {  
  165.         // success  
  166.       },  
  167.       fail: function () {  
  168.         // fail  
  169.       },  
  170.       complete: function () {  
  171.         // complete  
  172.       }  
  173.     })  
  174.   }  
  175. })  


demo代码下载

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值