横向きで表示する必要がある Web アプリがあります。
innerWidth
これを行うために、とをチェックする関数を作成しましたinnderHeight
。幅が高さよりも大きい場合は、幸せな日です。resize
これは、ページをロードするときに完全に機能しますが、イベントが発生したときに方向も確認する必要があります。
だから私のコードの流れは -
resize
イベント呼び出しのトリガー時$scope.getOrienttion()
- 現在の向きを計算し、結果を返す
$scope.getOrienttion()
を使用して の値の変化を監視し、 の値をwatch
更新します。$scope.orientation
上記の手順 1 と 2 は正常に機能しているように見えますが、watch
変更は検出され$scope.getOrienttion()
ず、ページの読み込み時にのみ起動されます。私は何か間違ったことをしているに違いありません。誰でも問題を見つけるのを手伝ってくれますか。
関連するAngularJSは次のとおりです-
christmasApp.controller('bodyCtrl', function($scope, $window){
angular.element($window).bind('resize', function(){
console.log('Event triggered');
$scope.getOrientation();
});
$scope.getOrientation = function(){
var w = $window.innerWidth,
h = $window.innerHeight;
var orientation = (w > h) ? 'landscape' : 'portrait'
console.log('Function triggered - ' + orientation)
return (w > h) ? 'landscape' : 'portrait';
};
$scope.$watch($scope.getOrientation, function(newValue, oldValue){
$scope.orientation = newValue;
console.log('Watch triggered - ' + newValue);
}, true);
});
そして、これは、値に応じて条件付きクラスが設定されたHTMLです$scope.orientation
(おそらく関係ありませんが、念のため)-
<body <?php body_class(); ?> data-ng-controller="bodyCtrl">
<div id="orientationMask" data-ng-class="{visible: orientation != 'landscape'}">
<p>Please turn your device to the <b>landscape</b> orientation.</p>
</div>
{ Additional code, obscured by the mask if it is show... }
</body>