html
<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
<script>
$(function() {
// 分享配置(请替换为你的实际值)
var shareData = {
title: '这里是分享的标题', // 分享标题
desc: '这里是分享的描述内容', // 分享描述(仅好友)
link: location.href, // 分享链接,建议动态获取
imgUrl: 'https://yourdomain.com/share.jpg', // 分享图标(必须是绝对路径)
success: function () {
// 分享成功回调
console.log('分享成功');
// 可在此处添加统计、积分等逻辑
//例如:addSharePoint(openid);
},
cancel: function () {
// 分享取消回调
console.log('分享已取消');
},
fail: function(res) {
// 分享失败
console.error('分享失败:', res);
alert('分享失败,请检查网络或权限');
}
};
// ================== 微信JSSDK 初始化 ==================
// 注意:以下 wx.config 和 wx.ready 必须在后端正确生成签名后调用
// 前端不能独立完成签名,必须由后端提供 jsapi_ticket、nonceStr、timestamp、signature
// 示例:假设后端通过模板注入了这些变量(推荐方式)
// 如果是 API 方式,需先请求后端获取 config 参数
wx.config({
debug: false, // 上线前设为 false
appId: '你的公众号AppID', // 必填,公众号的唯一标识
timestamp: parseInt(<?= $timestamp ?>), // 必填,生成签名的时间戳(由后端提供)
nonceStr: '<?= $nonceStr ?>', // 必填,生成签名的随机串(由后端提供)
signature: '<?= $signature ?>', // 必填,签名(由后端生成)
jsApiList: [
'updateAppMessageShareData', // 分享给好友
'updateTimelineShareData' // 分享到朋友圈
]
});
wx.ready(function() {
// 所有接口调用都必须在 config 接口获得结果之后,config是一个客户端的异步操作,
// 所以如果需要在页面加载时就调用相关接口,则应在 ready 回调中执行
// 更新“分享给朋友”数据
wx.updateAppMessageShareData(shareData);
// 更新“分享到朋友圈”数据
wx.updateTimelineShareData({
title: shareData.title,
link: shareData.link,
imgUrl: shareData.imgUrl,
success: shareData.success,
cancel: shareData.cancel,
fail: shareData.fail
});
console.log('微信JSSDK初始化成功,分享已设置');
});
wx.error(function(res) {
// config失败会执行error
console.error('微信JSSDK配置失败:', res);
alert('分享功能初始化失败,请刷新重试');
});
// ================== 页面内按钮:复制链接并关闭 ==================
$('.clipBoardTxt').on('click', function () {
const url = location.href;
const tempInput = $('<input>').val(url).appendTo('body').select();
try {
document.execCommand('copy');
alert('链接已复制,快去分享给好友吧!');
} catch (err) {
alert('复制失败,请手动复制链接');
}
tempInput.remove();
// 关闭微信网页
setTimeout(function () {
WeixinJSBridge && WeixinJSBridge.invoke('closeWindow', {});
}, 1500);
});
// ================== 摇一摇功能(保留原逻辑,仅修复关键错误) ==================
var SHAKE_THRESHOLD = 1800;
var last_update = 0;
var x = y = z = last_x = last_y = last_z = 0;
var num = 0;
var shake_status = 0; // 0:未开始, 1:进行中, 2:结束
var numMax = 10; // 目标摇动次数
var price = 0;
function deviceMotionHandler(eventData) {
var acceleration = eventData.accelerationIncludingGravity;
var curTime = new Date().getTime();
if ((curTime - last_update) > 100) {
var diffTime = curTime - last_update;
last_update = curTime;
x = acceleration.x;
y = acceleration.y;
z = acceleration.z;
var speed = Math.abs(x + y + z - last_x - last_y - last_z) / diffTime * 10000;
if (speed > SHAKE_THRESHOLD && shake_status === 1) {
num++;
$('#numberCount').text(num); // 使用正确选择器
$('#shakingAudio')[0].play(); // 播放音效
if (num >= numMax) {
shake_status = 2;
window.removeEventListener('devicemotion', deviceMotionHandler);
$('#shakingResult')[0].play();
drawRedbag(openid); // 抢红包请求
}
}
last_x = x;
last_y = y;
last_z = z;
}
}
function listenPhoneShake() {
if (window.DeviceMotionEvent) {
window.addEventListener('devicemotion', deviceMotionHandler, false);
console.log('摇一摇监听已开启');
} else {
alert('您的设备不支持摇一摇功能');
}
}
// 启动摇一摇(示例触发)
// listenPhoneShake(); // 在合适时机调用,如倒计时结束
});
</script>