时间:2019-05-03 来源:小程序工厂
永***: // 摇一摇公共方法
function Shake(fn, sensitive, timeGap) {
var lastTime = new Date();
var lastX = null, lastY = null, lastZ = null;
var sensitive = sensitive || 50; // 所需力度,xyz偏移值
var timeGap = timeGap || 200; // 两次之间时间间隔
var isActive = true;
wx.onAccelerometerChange(function (res) {
if (!isActive) return;
// res = res.accelerationIncludingGravity;
var currentTime;
var timeDifference;
var deltaX = 0, deltaY = 0, deltaZ = 0;
if ((lastX === null) && (lastY === null) && (lastZ === null)) {
lastX = res.x; lastY = res.y; lastZ = res.z; return;
}
deltaX = Math.abs(lastX - res.x) * 100;
deltaY = Math.abs(lastY - res.y) * 100;
deltaZ = Math.abs(lastZ - res.z) * 100;
if (((deltaX > sensitive) && (deltaY > sensitive)) ||
((deltaX > sensitive) && (deltaZ > sensitive)) ||
((deltaY > sensitive) && (deltaZ > sensitive))) {
currentTime = new Date();
timeDifference = currentTime.getTime() - lastTime.getTime();
if (timeDifference > timeGap) {
fn && fn(timeDifference);
lastTime = new Date();
}
}
lastX = res.x; lastY = res.y; lastZ = res.z;
});
return {
stop: function () {
isActive = false;
wx.stopAccelerometer();
}
}
}
// 实际使用
Page({
startShake: function () {
this.shake = Shake(() => {
// something
});
},
stopShake: function () {
this.shake && this.shake.stop();
},
})
主要是 wx.onAccelerometerChange 这个,其他和 HTML 没太多区别。
可以在 startShake 的地方开启计时,something 的地方进行计数,计时结束再 stopShake。
A***:
谢...谢谢...大佬!
微信小程序可以做老人定位的开发吗?,微信小程序开发教程
A***:
@永恒君 大佬、我怎么获得摇动的次数???
永***:
写在 something 那里,这个函数是每次摇成功了就运行一次的。比如这样:
Page({
startShake: function () {
setTimeout(() => {
this.stopShake();
}, 30 * 1000);
this.shake = Shake(() => {
// something
this.shakeCount = (this.shakeCount || 0) + 1
});
},
})
A***:
现在有点恍然大明白的感觉了。谢谢大佬。我看错了,那个fn是函数来着。
扫码登录过期不能刷新二维码 没有关闭按钮 只能结束任务#微信小程序开发 ...
A***:系统记录
永***:
你一般用的什么名称呢,我不是大厂的,写得不规范。
A***:
应该都是这个吧
微信小程序命令面板 可以编辑吗?--微信小程序开发教程 ...
A***:
再请问一下,startShake()这个函数是写什么里面触发的还是不用触发摇的时候会自己计算;
打印this.shakeCount无效??,实际摇动的时候感觉// something这里面并没有执行。我是直接ready以后注册的事件
永***:
唔...不太能理解。我觉得可能的错误原因是:
startShake 也需要运行,比如放在 onReady 里面。
Page({
onReady: function(){
this.startShake();
}
startShake: function () {
setTimeout(() => {
this.stopShake();
}, 30 * 1000);
this.shake = Shake(() => {
this.shakeCount = (this.shakeCount || 0) + 1
});
},
})