java小程序飘落雪花,圣诞节星星飘落的效果(微信小程序版)

圣诞节快到啦~🎄🎄🎄🎄咱们也试着做做小程序版本的星星✨飘落效果吧

在微信小程序内如何实现雪花飘落,星星飘落的效果呢~

先来个效果图:

30d2e487f393

1576672109245.gif

一步一步来:

页面内容wxml,先简单切个图吧。

页面样式wxss,因为切片用的不太熟练,图片之间有个2rpx的空隙。

.container {

height: 100%;

box-sizing: border-box;

min-height: 100vh;

}

image {

width: 100%;

display: block;

margin-top: -2rpx; //不会切图造的孽

}

canvas {

width: 100%;

min-height:100vh;

position: fixed;

top: 0;

z-index: 888;

}

重点JS:

//获取应用实例

const app = getApp()

// 存储所有的星星

const stars = []

// 下落的加速度

const G = 0.01

const stime = 60

// 速度上限,避免速度过快

const SPEED_LIMIT_X = 1

const SPEED_LIMIT_Y = 1

const W = wx.getSystemInfoSync().windowWidth

const H = wx.getSystemInfoSync().windowHeight

const starImage = 'https://qiniu-image.qtshe.com/WechatIMG470.png' //星星素材

Page({

onLoad() {

this.setAudioPlay()

},

onShow() {

this.createStar()

},

createStar() {

let starCount = 350 //星星总的数量

let starNum = 0 //当前生成星星数

let deltaTime = 0

let ctx = wx.createCanvasContext('myCanvas')

let requestAnimationFrame = (() => {

return (callback) => {

setTimeout(callback, 1000 / stime)

}

})()

starLoop()

function starLoop() {

requestAnimationFrame(starLoop)

ctx.clearRect(0, 0, W, H)

deltaTime = 20 //每次增加的星星数量

starNum += deltaTime

if (starNum > starCount) {

stars.push(

new Star(Math.random() * W, 0, Math.random() * 5 + 5)

);

starNum %= starCount

}

stars.map((s, i) => { //重复绘制

s.update()

s.draw()

if (s.y >= H) { //大于屏幕高度的就从数组里去掉

stars.splice(i, 1)

}

})

ctx.draw()

}

function Star(x, y, radius) {

this.x = x

this.y = y

this.sx = 0

this.sy = 0

this.deg = 0

this.radius = radius

this.ax = Math.random() < 0.5 ? 0.005 : -0.005

}

Star.prototype.update = function() {

const deltaDeg = Math.random() * 0.6 + 0.2

this.sx += this.ax

if (this.sx >= SPEED_LIMIT_X || this.sx <= -SPEED_LIMIT_X) {

this.ax *= -1

}

if (this.sy < SPEED_LIMIT_Y) {

this.sy += G

}

this.deg += deltaDeg

this.x += this.sx

this.y += this.sy

}

Star.prototype.draw = function() {

const radius = this.radius

ctx.save()

ctx.translate(this.x, this.y)

ctx.rotate(this.deg * Math.PI / 180)

ctx.drawImage(starImage, -radius, -radius * 1.8, radius * 2, radius * 2)

ctx.restore()

}

},

setAudioPlay() {

const adctx = wx.createInnerAudioContext()

adctx.autoplay = true

adctx.loop = true

adctx.src = 'https://dn-qtshe.qbox.me/Jingle%20Bells.mp3'

adctx.onPlay(() => {

console.log('开始播放')

adctx.play()

})

}

})

以上只是简单实现了一个星星飘落的效果,预览的时候需要开启不校验合法域名哦~

目前还有更优的h5版本,使用Three.js实现的,在小程序内使用Three.js对于我来说有点打脑壳,先把效果分享出来吧。圣诞快乐

如果有需要的可以留言,我可以整理下发源码给你。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微信小程序中的飘落特效可以通过使用JavaScript来实现。下面是一个简单的示例代码,可以在小程序实现雪花飘落效果: ```javascript // 在Page的js文件中添加以下代码 Page({ data: { snowList: [] // 用于存储雪花的数组 }, onLoad: function () { // 创建雪花 this.createSnow(); }, createSnow: function () { // 获取屏幕宽度和高度 const { windowWidth, windowHeight } = wx.getSystemInfoSync(); // 雪花数量 const snowNum = 30; // 随机生成雪花的位置和大小,并添加到snowList数组中 for (let i = 0; i < snowNum; i++) { const snow = { left: Math.random() * windowWidth, // 雪花左侧位置 top: Math.random() * windowHeight, // 雪花顶部位置 size: Math.random() * 20 + 10 // 雪花大小 }; this.data.snowList.push(snow); } // 更新数据,触发页面渲染 this.setData({ snowList: this.data.snowList }); // 开始动画效果 this.snowAnimation(); }, snowAnimation: function () { // 雪花下落动画 const animation = wx.createAnimation({ duration: 10000, // 动画持续时间 timingFunction: 'linear' // 线性动画 }); // 设置动画效果 animation.translateY('100%').step(); // 更新数据,触发页面渲染 this.setData({ snowAnimation: animation.export() }); } }) ``` 在小程序的wxml文件中,可以使用`<view>`标签来展示雪花效果: ```html <!-- 在wxml文件中添加以下代码 --> <view class="snow-container"> <view wx:for="{{snowList}}" wx:key="{{index}}" class="snow" animation="{{snowAnimation}}" style="left:{{item.left}}px; top:{{item.top}}px; width:{{item.size}}px; height:{{item.size}}px;"></view> </view> ``` 在wxss文件中,可以设置雪花的样式: ```css /* 在wxss文件中添加以下代码 */ .snow-container { position: fixed; width: 100%; height: 100%; overflow: hidden; } .snow { position: absolute; background-color: #fff; border-radius: 50%; } ``` 这样就可以在小程序实现雪花飘落的特效了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值