javascript android window.onorientationchange不断触发

时间:2011-08-23 18:58:53

标签: javascript jquery android mobile

我正在尝试检测移动设备上的方向更改并在方向完成后触发功能,但该功能内的代码在Android中不断触发,我不知道为什么。这是我的代码:

var supportsOrientationChange = "onorientationchange" in window;
var orientationEvent = supportsOrientationChange ? "orientationchange" : "resize";

window.addEventListener(orientationEvent, 
   function() { alert ('orientation changed'); }, 
   false
);

是否有人知道如何编写此内容,以便在方向更改完成后仅触发一次?

3 个答案:

答案 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的设备上发生更改,则可以编写自定义检测脚本作为后备来触发事件。