Как определить вращение устройства в Кордове?

Я хотел бы обнаружить вращение живого устройства (не ориентацию, вращение в градусах) с помощью Cordova. Я использовал движение устройства, но я получаю кучу значений ускорения x, y и z, как я могу рассчитать вращение из этого?

Я хотел бы обнаружить полное вращение на 360 градусов (представьте, что вы кладете устройство на палку [или маятник], а затем ударяете по нему, чтобы оно качалось).

Спасибо!


person trueicecold    schedule 07.07.2017    source источник
comment
этот плагин дает детали вращения устройства в градусах. Это то, что вы ищете?   -  person Gandhi    schedule 14.07.2017
comment
Привет, @Ghandi, пожалуйста, посмотри на комментарий, который я оставил для Devrim.   -  person trueicecold    schedule 14.07.2017
comment
получил это сейчас. Все еще не уверен, что есть что-то еще, кроме плагина движения устройства ... Проверим, хотя   -  person Gandhi    schedule 14.07.2017
comment
движение устройства — единственный плагин, который близок к этому требованию. Но количество оборотов устройства должно отслеживаться с помощью пользовательской логики, которая должна быть построена поверх координат x, y, z. Насколько я проверял, в плагинах пока нет готового решения.   -  person Gandhi    schedule 15.07.2017


Ответы (4)


Вы можете использовать API ориентации экрана, установив плагин, упомянутый Ганди в комментарии.

cordova plugin add cordova-plugin-screen-orientation

Затем вы можете использовать событие для обнаружения изменения ориентации после deviceReady;

window.addEventListener('orientationchange', function(){
    console.log(screen.orientation.type); // e.g. portrait
});

or

screen.orientation.onchange = function({
    console.log(screen.orientation.type);
});

Честно говоря, вы должны быть в состоянии сделать это без плагина, но было бы безопаснее добавить плагин Cordova.

Поскольку вы хотите обнаружить вращение на 360, которое не включено, вам нужно посчитать это самостоятельно... Что-то вроде строк;

var startingPoint = 0;
window.addEventListener('orientationchange', monitorOrientation); 

function monitorOrientation(e) {
    console.log('Device orientation is: ', e. orientation);

    if(e. orientation == 180 || e.orientation == -180) {
        // You can extend this or remove it completely and increment the variable as you wish i.e. 4x90 = 360
        startingPoint += 180;
    }

    if(startingPoint == 360) {
        // Do whatever you want and reset starting point back to 0
        startingPoint = 0;
    } 
}
person Abdul Sadik Yalcin    schedule 14.07.2017
comment
Спасибо, @Devrim, но устройство вообще не вращается. Он стоит. Представьте, что устройство приклеено к флешке в ландшафтном режиме, а потом вы крутите флешку. Ориентация в этом случае не сработает, а это тот случай, который я ищу. - person trueicecold; 14.07.2017
comment
Хм, если честно, я не уверен в этом @trueicecold. Я полагаю, тогда вы ищете устройства движения или сенсорные инструменты. Попробуйте этот плагин github.com/apache/cordova-plugin-device-motion< /а> - person Abdul Sadik Yalcin; 14.07.2017
comment
Да, я видел это, но я не знаю, как нормализовать x, y, z, чтобы обнаружить полное колебание на 360 градусов... - person trueicecold; 15.07.2017

возможно, вы ищете компас : cordova-plugin-device-orientation

person Djames    schedule 20.07.2017

Подключаемый модуль ориентации устройства предоставляет сведения о повороте устройства в градусах.

Но если вам нужно отслеживать движение устройства, движение устройства — единственный плагин. я мог видеть, что близко к этому требованию. Но количество оборотов устройства должно отслеживаться с помощью пользовательской логики, которая должна быть построена поверх координат x, y, z. Насколько я проверял, в плагинах нет готового решения.

person Gandhi    schedule 21.07.2017

Вы вычисляете «живое вращение» устройства, используя значения ускорения x, y и z.

Чтобы использовать аналогию с маятником, предполагая, что вы точно знаете, что устройство всегда будет качаться влево и вправо лицом к пользователю (т. е. перемещаться по оси x), вы можете использовать значение X.

Имейте в виду, что вы не получите значения градусов. В прошлый раз, когда я проверял, iOS возвращает 0 для вертикального (портретного) затем от -9 до 9 при повороте от одного ландшафта к другому.

person BigBalli    schedule 19.06.2020