AngularJS1.1系にngMobileがあります。これが有効になるとスマートフォンでのクリックの遅延がなくなり、スワイプの利用も可能になります。
次期リリース版(1.2系)に含まれると思います。1.0系にバックポートするか1.1系を使うか、1.2系を待つのが良いと思います。
https://github.com/angular/angular.js/tree/master/src/ngMobile
スマートフォンやタブレットではJavaScriptのクリックイベントが少し遅れてくるようになっています。
普段なら自分でtouchstartイベントなどを拾って解決するところだと思いますが、AngularJSはng-clickというAngularJSの機能を使うので、その方法がそのままでは使えなさそうです。AngularJSライク?に解決したのでブログに残します。
タッチイベントが来たらクリックイベントを起こしています。
Gistにも書きました。
CoffeeScriptです。
app = angular.module('AngularStudy', []).directive 'ndClick', => ($scope, $element, $attrs) => isTap = isTapped = false $element.bind 'click', => $scope.$apply $attrs['ndClick'] unless isTapped $element.bind 'touchstart', => isTap = true $element.bind 'touchmove', => isTap = false $element.bind 'touchend', => if isTap isTapped = true $scope.$apply $attrs['ndClick'], $element
一応CoffeeScriptをコンパイルしたJavaScriptも書いておきます。
var app, _this = this; app = angular.module('AngularStudy', []).directive('ndClick', function() { return function($scope, $element, $attrs) { var isTap, isTapped; isTap = isTapped = false; $element.bind('click', function() { if (!isTapped) { return $scope.$apply($attrs['ndClick']); } }); $element.bind('touchstart', function() { return isTap = true; }); $element.bind('touchmove', function() { return isTap = false; }); return $element.bind('touchend', function() { if (isTap) { isTapped = true; return $scope.$apply($attrs['ndClick'], $element); } }); }; });
使い方は今までng-clickを書いていたところをnd-clickにするだけです。
<button nd-click="hoge()">ボタン</button>
パソコンとスマートフォンの差を吸収しているので、パソコンでもスマートフォンでもnd-clickだけでカバーできます。
nd-clickはnon delay clickです。
0 件のコメント:
コメントを投稿