我正在努力在 HTML 表格行上实现类似 iOS 的滑动删除手势。例如,向左滑动Site11
会将其从标准行打开:
进入可删除行:
我有这个功能与ng-swipe-left
指令一起工作。但是,我ng-click
在每一行上都有一个指令,可以导航到应用程序的不同视图。目前,当我在一行上执行滑动时会触发这两个事件,除非滑动结束于“Site11”文本本身,而不是该行中的其他任何地方。例如,此手势将同时触发 theng-click
和 theng-swipe-left
handlers:
但这个手势只会触发ng-swipe-left
处理程序:
ng-click
如果在行上执行滑动,无论滑动在哪里结束,如何防止处理程序被触发?
这是定义每一行的 HTML 结构的要点:
<tr ng-repeat="item in items">
<td ng-click="openDetailPane()"
ng-swipe-left="$parent.swipeDeleteItemId = item.Id"
ng-swipe-right="$parent.swipeDeleteItemId = 'none'">
<div list-item></div>
</td>
<td>
<i class="fa fa-angle-right fa-2x" />
<span>{{item.ChildCount}}</span>
</td>
</tr>
list-item
删除按钮在指令内部定义;swipeDeleteItemId
仅当其 ID 与控制器上的属性匹配时才可见:
<div class="list-item">
<span>{{item.Name}}</span>
<div ng-class="{true: 'is-visible', false: ''}[item.Id === swipeDeleteItemId]">
<div class="delete-item-swipe-button"
ng-mousedown="$event.stopPropagation();"
ng-click="$event.stopPropagation();">Delete</div>
</div>
</div>
我应该提一下,我只在 Chrome 和 IE11 的桌面版本中尝试过这个 - 我假设从鼠标注册的点击和拖动与移动设备上的滑动相同。