1

ng-repeat からの li で構築された iScroll 要素を含むディレクティブがあります。

<div class="my-film">
    <div class="filmstrip-container">
        <div class="scroll-wrapper">

            <ul class="film-container">

                    <li ng-repeat="film in films" 
                        ng-mouseover="onMouseOverItem($event)" 
                        ng-mouseleave="onMouseLeaveItem($event)"
                        ng-click="openFilm()"
                        class='film-slide'>

                     ...nested videos etc in here.

                    </li>

            </ul>

        </div>
    </div>
</div>

ディレクティブのリンク関数には、このような onClick 関数があります

scope.openFilm = function() {
    ...code to open the film and play
}

これはデスクトップでは完全に期待どおりに機能しますが、タッチスクリーン (iPad でのテスト) では openFilm() 関数が呼び出されることはありませんが、要素には ng-click-active クラスが適用されます。

li 要素には他のイベント リスナーがありますが、これらを削除しても違いはありませんでした。それはiScrollと関係があるのでしょうか?

Angular 1.3 を使用しており、ngTouch が追加されています。

4

3 に答える 3

2

ここでの問題は、iScroll がタッチ イベントをブロックしていたことです。iScroll を開始するときにオプションとして {click: true} を渡すと、問題が解決しました。

于 2014-12-11T14:12:58.033 に答える
2

iOS は、ng-mouseover、ng-click、ng-mouseleave などに対して個別のイベントを作成します。つまり、最初のタップで ng-mouseover がトリガーされ、2 回目のタップで ng-click がトリガーされ、要素の外側をタップすると ng- がトリガーされます。マウスリーブ。

悲しいことに、iOS によって作成されたこの問題は ngTouch で修正されると思っていましたが、修正されませんでした。CSSホバーを使用する場合にのみ修正され、Javaスクリプトのマウスイベント(Angularのものを含む)を使用する場合は修正されませんでした。

于 2015-02-26T17:58:41.583 に答える