Files
WX_PAY_codePro9_8/miniprogram/pages/index/index.js

337 lines
8.7 KiB
JavaScript
Raw Normal View History

2025-09-08 15:57:01 +08:00
// index.js
Page({
data: {
// 页面的初始数据
hasPaid: false, // 默认未付款状态
animationData: {}, // 动画数据
showCapsule: false, // 是否显示扭蛋玩具
capsuleAnimation: {}, // 扭蛋动画数据
buttonAnimation: {} // 按钮动画数据
},
onLoad: function() {
// 页面加载时执行的初始化逻辑
// 检查是否已经付款(从本地存储中读取状态)
try {
const hasPaid = wx.getStorageSync('hasPaid');
if (hasPaid) {
this.setData({
hasPaid: true
});
}
} catch (e) {
console.error('获取支付状态失败', e);
}
// 创建按钮动画
this.initButtonAnimation();
},
onShow: function() {
// 页面显示时,初始化动画
this.initAnimation();
},
// 初始化按钮动画
initButtonAnimation: function() {
const animation = wx.createAnimation({
duration: 1000,
timingFunction: 'ease',
});
// 创建一个循环动画
setInterval(() => {
animation.scale(1.05).step();
animation.scale(1).step();
this.setData({
buttonAnimation: animation.export()
});
}, 2000);
},
// 初始化扭蛋机动画
initAnimation: function() {
if (this.data.hasPaid) {
const animation = wx.createAnimation({
duration: 1000,
timingFunction: 'ease',
});
animation.rotate(5).step();
animation.rotate(-5).step();
animation.rotate(0).step();
this.setData({
animationData: animation.export()
});
// 循环动画
setTimeout(() => {
this.initAnimation();
}, 3000);
}
},
// 请求支付
requestPayment: function() {
const that = this;
// 在实际应用中,这里应该调用后端接口获取支付参数
// 这里仅做模拟演示,直接显示支付成功
wx.showLoading({
title: '请求支付中...',
});
// 按钮动画效果
const animation = wx.createAnimation({
duration: 300,
timingFunction: 'ease',
});
animation.scale(0.9).step();
animation.scale(1).step();
this.setData({
buttonAnimation: animation.export()
});
// 模拟网络请求延迟
setTimeout(function() {
wx.hideLoading();
// 模拟支付过程
wx.showModal({
title: '【琼辉】模拟支付',
content: '由于这是演示点击确定将直接模拟支付成功。实际应用中需要调用微信支付API。',
success: function(res) {
if (res.confirm) {
// 模拟支付成功
wx.showToast({
title: '支付成功',
icon: 'success',
duration: 2000
});
// 更新支付状态
that.setData({
hasPaid: true
});
// 保存支付状态到本地存储
try {
wx.setStorageSync('hasPaid', true);
} catch (e) {
console.error('保存支付状态失败', e);
}
// 初始化动画
that.initAnimation();
}
}
});
}, 1500);
// 实际微信支付代码(仅供参考,需要后端配合)
/*
wx.request({
url: '你的后端支付接口',
method: 'POST',
data: {
amount: 1 // 1元
},
success: function(res) {
// 获取到支付参数后调用支付接口
wx.requestPayment({
timeStamp: res.data.timeStamp,
nonceStr: res.data.nonceStr,
package: res.data.package,
signType: res.data.signType,
paySign: res.data.paySign,
success: function(payRes) {
// 支付成功
wx.showToast({
title: '支付成功',
icon: 'success',
duration: 2000
});
// 更新支付状态
that.setData({
hasPaid: true
});
// 保存支付状态到本地存储
try {
wx.setStorageSync('hasPaid', true);
} catch (e) {
console.error('保存支付状态失败', e);
}
},
fail: function(payError) {
// 支付失败
wx.showToast({
title: '支付失败',
icon: 'none',
duration: 2000
});
console.error('支付失败', payError);
}
});
},
fail: function(error) {
wx.hideLoading();
wx.showToast({
title: '获取支付参数失败',
icon: 'none',
duration: 2000
});
console.error('获取支付参数失败', error);
}
});
*/
},
// 跳转到百度地图
navigateToWebsite: function() {
const that = this;
// 显示扭蛋动画
this.playCapsuleAnimation();
// 延迟后跳转
setTimeout(function() {
// 跳转到webview页面该页面包含web-view组件用于显示百度地图
wx.navigateTo({
url: '/pages/webview/webview',
success: function() {
console.log('跳转到webview页面成功');
},
fail: function(error) {
console.error('跳转到webview页面失败', error);
// 如果跳转失败,提示用户复制链接
wx.showModal({
title: '提示',
content: '跳转失败,是否复制百度地图链接到剪贴板?',
success: function(res) {
if (res.confirm) {
// 复制链接到剪贴板
wx.setClipboardData({
data: 'https://map.baidu.com',
success: function() {
wx.showToast({
title: '链接已复制,请在浏览器中粘贴访问',
icon: 'none',
duration: 2000
});
}
});
}
}
});
}
});
}, 2500);
},
// 播放扭蛋动画
playCapsuleAnimation: function() {
const that = this;
// 创建扭蛋机摇动动画
const machineAnimation = wx.createAnimation({
duration: 500,
timingFunction: 'ease',
});
machineAnimation.rotate(10).step();
machineAnimation.rotate(-10).step();
machineAnimation.rotate(8).step();
machineAnimation.rotate(-8).step();
machineAnimation.rotate(5).step();
machineAnimation.rotate(-5).step();
machineAnimation.rotate(0).step();
this.setData({
animationData: machineAnimation.export()
});
// 显示扭蛋玩具
setTimeout(function() {
that.setData({
showCapsule: true
});
// 创建扭蛋玩具动画
const capsuleAnimation = wx.createAnimation({
duration: 1000,
timingFunction: 'ease',
});
capsuleAnimation.opacity(0).translateY(-100).scale(0).step();
capsuleAnimation.opacity(1).translateY(0).scale(1).step();
that.setData({
capsuleAnimation: capsuleAnimation.export()
});
// 2秒后隐藏扭蛋玩具
setTimeout(function() {
const hideAnimation = wx.createAnimation({
duration: 500,
timingFunction: 'ease',
});
hideAnimation.opacity(0).scale(0.5).step();
that.setData({
capsuleAnimation: hideAnimation.export()
});
setTimeout(function() {
that.setData({
showCapsule: false
});
}, 500);
}, 2000);
}, 1000);
},
// 清除付款记录
clearPayment: function() {
const that = this;
// 按钮动画效果
const animation = wx.createAnimation({
duration: 200,
timingFunction: 'ease',
});
animation.scale(0.9).step();
animation.scale(1).step();
wx.showModal({
title: '提示',
content: '确定要清除付款记录吗?清除后将需要重新支付',
success: function(res) {
if (res.confirm) {
try {
wx.removeStorageSync('hasPaid');
that.setData({
hasPaid: false,
showCapsule: false
});
wx.showToast({
title: '已清除付款记录',
icon: 'success',
duration: 2000
});
} catch (e) {
console.error('清除付款记录失败', e);
wx.showToast({
title: '清除失败',
icon: 'none',
duration: 2000
});
}
}
}
});
}
})