// 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 }); } } } }); } })