我正在尝试检测移动设备上的方向更改并在方向完成后触发功能,但该功能内的代码在Android中不断触发,我不知道为什么。这是我的代码:
var supportsOrientationChange = "onorientationchange" in window;
var orientationEvent = supportsOrientationChange ? "orientationchange" : "resize";
window.addEventListener(orientationEvent,
function() { alert ('orientation changed'); },
false
);
是否有人知道如何编写此内容,以便在方向更改完成后仅触发一次?
答案 0 :(得分:8)
我在我的应用中使用了解决方法。我为orientationchange添加了一个事件监听器,然后设置了一个超时,这样就可以进行方向转换,我可以得到一个新的宽度值,它实际反映了方向改变后的宽度。
var device_width = 0;
$(document).ready(function () {
var oc_timer;
$(window).bind('orientationchange', function () {
clearTimeout(oc_timer);
oc_timer = setTimeout(function () {
device_width = $(window).width();
}, 500);
});
});
我不肯定这会解决你的持续射击功能问题,但这是我找到的解决方案。
答案 1 :(得分:3)
我找到了一种方法,以防其他人仍然遇到同样的问题,请查看:
function onOrientationChange() {
if (typeof(this.orientation) === "undefined"){
if (window.orientation == -90 || window.orientation == 90) {
this.orientation = "landscape";
} else {
this.orientation = "portrait";
}
// alert ("in 1");
// you code here for change
}
if ((window.orientation == -90 || window.orientation == 90) && (this.orientation == "portrait")) {
this.orientation = "landscape";
// alert ("in 2");
// you code here for change
}
if ((window.orientation == 0 || window.orientation == 180) && (this.orientation == "landscape")) {
this.orientation = "portrait";
// alert ("in 3");
// you code here for change
}
}
答案 2 :(得分:0)
针对不太详细的应用程序的简单解决方案
//bind orientation change event
$(window).bind("orientationchange", orientationChange);
//later,
function orientationChange(){
//whatever needs to happen when it changes.
alert("changed");
}
如果您需要传递信息,也可以使用$ .on()。
在不支持它的浏览器中,事件不会触发。然后,如果方向在不支持onorientationchange的设备上发生更改,则可以编写自定义检测脚本作为后备来触发事件。