最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

微信小程序?qū)崿F(xiàn)紅包雨功能

 更新時間:2018年07月11日 10:37:53   作者:北風(fēng)_TZ  
這篇文章主要為大家詳細介紹了微信小程序?qū)崿F(xiàn)紅包雨功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文為大家分享了微信小程序?qū)崿F(xiàn)紅包雨的具體代碼,供大家參考,具體內(nèi)容如下

今天有個小師妹來問我怎樣用微信小程序?qū)崿F(xiàn)紅包雨效果,如果用web很好實現(xiàn),但是小程序不是那么容易,整合自己也有一年沒摸過小程序了,決定試一試。

首先明確“紅包雨”的需求:

  • 隨機位置掉落
  • 隨機紅包樣式
  • 同一時間掉落個數(shù)隨機
  • 每個紅包的掉落速度隨機,但不能太快也不能太慢

首先看看我做的效果吧

    首先明確小程序?qū)崿F(xiàn)紅包雨和web網(wǎng)頁實現(xiàn)紅包雨難點上有什么不同:

  • 小程序不能直接操作dom,web網(wǎng)頁可以操作
  • 小程序循環(huán)渲染wx:for內(nèi)無法執(zhí)行animation,web網(wǎng)頁中animation執(zhí)行無條件約束
  • 小程序修改樣式屬性需要通過數(shù)據(jù)綁定無法直接修改,web網(wǎng)頁可以直接取dom元素進行修改

    好了那么問題來了怎樣實現(xiàn)生成紅包雨呢?小程序無法直接操作dom也就意味著不能向dom內(nèi)添加元素,這里我的解決辦法是先生成預(yù)設(shè)個數(shù)的紅包在視窗外部(用戶看不到),然后修改每個紅包的樣式來實現(xiàn)動畫(當然用css keyframes幀動畫也可以,我這里使用的是js修改屬性)

話不多說直接上代碼吧,代碼內(nèi)有注釋

wxml:

<view wx:for="{{packetList}}" wx:for-index="index" wx:for-item="items">
 <image class="red-packet" src="{{items.src}}" style="position:fixed;top:{{items.top}}px;left:{{items.left}}px;-webkit-transition:{{items.speed}}ms linear 0ms;transition:{{items.speed}}ms linear 0ms">
 </image>
</view>

wxss:

.red-packet{
 width: 20px;
 height: 25px;
 z-index: 100;
 transition-property:transform,top;
 transform-origin:50% 50% 0;
 -webkit-transition-property:transform,top;
 -webkit-transform-origin:50% 50% 0;
}

js:

Page({
 
 /**
 * 頁面的初始數(shù)據(jù)
 */
 data: {
 windowWidth:"",//窗口寬度
 windowHeigh:"",//窗口高度
 packetList:[{}],//紅包隊列
 packetNum:200,//總共紅包的數(shù)量
 showInter:''// 循環(huán)動畫定時器
 },
 
 /**
 * 生命周期函數(shù)--監(jiān)聽頁面加載
 */
 onLoad: function (options) {
 var that = this;
 
 // 獲取手機屏幕寬高
 wx.getSystemInfo({
  success: function (res) {
  that.setData({
   windowWidth: res.windowWidth,
   windowHeigh: res.windowHeight,
   top: res.windowHeight-100 //設(shè)置紅包初始位置
  })
  }
 })
 
 //建立臨時紅包列表
 var packetList=[];
 //建立臨時紅包圖片數(shù)組
 var srcList = ["../images/packet-one.png", "../images/packet-two.png"];
 //生成初始化紅包
 for(var i=0;i<that.data.packetNum;i++){
  // 生成隨機位置(水平位置)
  var left = Math.random() * that.data.windowWidth-20;
  // 優(yōu)化位置,防止紅包越界現(xiàn)象,保證每個紅包都在屏幕之內(nèi)
  if(left<0){
  left+=20;
  } else if (left > that.data.windowWidth){
  left-=20;
  }
  // 建立臨時單個紅包
  var packet = {
  src: srcList[Math.ceil(Math.random() * 2) - 1],
  top: -30,
  left:left,
  speed:Math.random() * 2500+3000  //生成隨機掉落時間,保證每個掉落時間保持在3秒到5.5秒之間
  }
  // 將單個紅包裝入臨時紅包列表
  packetList.push(packet);
  // 將生成的臨時紅包列表更新至頁面數(shù)據(jù),頁面內(nèi)進行渲染
  that.setData({
  packetList: packetList
  })
 }
 
 // 初始化動畫執(zhí)行當前索引
 var tempIndex=0;
 // 開始定時器,每隔1秒掉落一次紅包
 that.data.showInter=setInterval(function(){
  // 生成當前掉落紅包的個數(shù),1-3個
  var showNum = Math.ceil(Math.random() * 3);
  // 防止數(shù)組越界
  if (tempIndex * showNum>=that.data.packetNum){
  // 如果所有預(yù)生成的紅包已經(jīng)掉落完,清除定時器
  clearInterval(that.data.showInter);
  }else{
  switch (showNum){
   case 1:
   //設(shè)置臨時紅包列表當前索引下的top值,此處top值為動畫運動的最終top值 
   packetList[tempIndex].top = that.data.windowHeigh;
   // 當前次掉落幾個紅包,索引值就加幾
   tempIndex+=1;
   break;
   case 2:
   packetList[tempIndex].top = that.data.windowHeigh;
   packetList[tempIndex + 1].top = that.data.windowHeigh;
   tempIndex+=2;
   break;
   case 3:
   packetList[tempIndex].top = that.data.windowHeigh;
   packetList[tempIndex + 1].top = that.data.windowHeigh;
   packetList[tempIndex + 2].top = that.data.windowHeigh;
   tempIndex += 3;
   break;
   default:
   console.log();
  }
  // 更新紅包列表數(shù)據(jù)
  that.setData({
   packetList: packetList
  })
  }
 },1000)
 }
})

好了紅包雨就這樣實現(xiàn)了,其實還是蠻有意思的。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • axios/fetch實現(xiàn)stream流式請求示例詳解

    axios/fetch實現(xiàn)stream流式請求示例詳解

    這篇文章主要為大家介紹了axios/fetch實現(xiàn)stream流式請求示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • JavaScript數(shù)組的一些奇葩行為

    JavaScript數(shù)組的一些奇葩行為

    今天,復(fù)習(xí)了一下JavaScript的數(shù)組,然后,把他的一些奇葩行為總結(jié)了一下,分享在腳本之家平臺,歡迎大家參考
    2016-01-01
  • JSON 對象未定義錯誤的解決方法

    JSON 對象未定義錯誤的解決方法

    下面小編就為大家?guī)硪黄狫SON 對象未定義錯誤的解決方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • js如何計算斐波那契數(shù)列第n項的值

    js如何計算斐波那契數(shù)列第n項的值

    這篇文章主要介紹了js如何計算斐波那契數(shù)列第n項的值問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 微信小程序頁面間跳轉(zhuǎn)傳參方式總結(jié)

    微信小程序頁面間跳轉(zhuǎn)傳參方式總結(jié)

    這篇文章主要給大家總結(jié)介紹了關(guān)于微信小程序頁面間跳轉(zhuǎn)傳參方式,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用小程序具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • js控制的回到頁面頂端goTop的代碼實現(xiàn)

    js控制的回到頁面頂端goTop的代碼實現(xiàn)

    在瀏覽網(wǎng)頁的時候應(yīng)該會經(jīng)常見到右下角有個【回到頂端】的懸浮東東,本文也要使用js實現(xiàn)一下,感興趣的朋友可以參考下哈,希望可以幫助到你
    2013-03-03
  • 用js模仿word格式刷功能實現(xiàn)代碼 [推薦]

    用js模仿word格式刷功能實現(xiàn)代碼 [推薦]

    非常不錯的模仿word格式刷實現(xiàn)代碼。推薦大家參考下思路。
    2009-07-07
  • js 一個關(guān)于圖片onload加載的事

    js 一個關(guān)于圖片onload加載的事

    前幾天一個項目讓我頭疼了很久,一個關(guān)于圖片加載時的loading效果,因為不是太懂js,所以在網(wǎng)上各種找資料,但還是不理想,無賴苦心研究,終于有了一點眉目了,雖然個中還有一些道理不懂,至少目的達到了
    2013-11-11
  • JS delegate與live淺析

    JS delegate與live淺析

    這篇文章主要介紹了JS delegate與live,有需要的朋友可以參考一下
    2013-12-12
  • Typescript定義多個接口類型聲明的方式小結(jié)

    Typescript定義多個接口類型聲明的方式小結(jié)

    這篇文章主要介紹了Typescript定義多個接口類型聲明的方式小結(jié),在 TypeScript 中,您可以使用交叉類型(&)或聯(lián)合類型(|)來組合多個接口,從而實現(xiàn)多個接口類型的混合,文中通過代碼講解的非常詳細,需要的朋友可以參考下
    2025-01-01

最新評論

盐亭县| 寻乌县| 盐边县| 安陆市| 公主岭市| 图木舒克市| 铅山县| 沭阳县| 延安市| 扶余县| 徐闻县| 崇阳县| 昌都县| 景泰县| 法库县| 阳曲县| 通榆县| 河北区| 科技| 固原市| 密云县| 库车县| 达孜县| 蓬溪县| 漳州市| 洞头县| 长兴县| 肥乡县| 瑞丽市| 邵阳市| 尚志市| 英德市| 彩票| 应城市| 镇安县| 临高县| 页游| 兴国县| 东源县| 丰镇市| 永春县|