ng-show 和 ng-hide 在 Ionic 中很慢。两个元素可见几毫秒(仅在 iOS 中)

Posted

技术标签:

【中文标题】ng-show 和 ng-hide 在 Ionic 中很慢。两个元素可见几毫秒(仅在 iOS 中)【英文标题】:ng-show and ng-hide are slow in Ionic. Two elements visible for few ms (only in iOS) 【发布时间】:2016-02-04 13:04:42 【问题描述】:

在 Ionic 项目中,我有一个音频播放器。如果没有播放音频,用户可以:

    用户点击播放按钮 音频开始 播放按钮被隐藏,暂停按钮显示

反之,如果正在播放音频,用户可以:

    用户点击暂停按钮 音频已暂停 暂停按钮被隐藏,播放按钮被显示

问题是播放和暂停都会显示几毫秒。只有当我点击暂停按钮(正在播放音频时)时才会发生这种情况,并且只有在 ios 中才会发生,在 android 中我没有这个问题。

这是错误的样子:

按钮 html 是:

<span ng-click="player.playAudio(audio)" ng-hide="player.isViewAudioPlayingAudio()">
    <img src="img/audio-play-icon.svg"  class="big-icon audio-control">
    <img src="img/audio-play-hover-icon.svg"  class="big-icon audio-control-hover">
</span>

<span ng-click="player.pauseAudio()" ng-show="player.isViewAudioPlayingAudio()">
    <img src="img/audio-pause-icon.svg"  class="big-icon audio-control" >
    <img src="img/audio-pause-hover-icon.svg"  class="big-icon audio-control-hover">
</span>

你可以在这里看到类是如何变化的(GIF图片,点击打开)

对于悬停按钮,我有几行 CSS。这不是问题,我尝试不使用悬停图像,但仍然有问题,但我向您展示以澄清。

.audio-control-hover
    display: none;


.activated
    .audio-control
        display: none;
    

    .audio-control-hover
        display: inline;
    

知道如何提高 ng-show 和 ng-hide 的性能吗?

【问题讨论】:

【参考方案1】:

性能明智的 ng-if 在某些情况下更好。这是一篇关于它的好文章。改用 ng-if 试试,看看会不会有所改善。

http://www.codelord.net/2015/07/28/angular-performance-ng-show-vs-ng-if/

【讨论】:

【参考方案2】:

Ionic 正在使用 Angular js 动画库来应用从一种状态到另一种状态的某些转换。它在 iOS 上效果不佳。尝试将以下代码添加到您的 css 以抑制动画:

.ng-hide,
.ng-animate,
.ng-hide-animate,
.ng-hide-remove 
    display: none !important;


.ng-animate.no-animate 
    -webkit-transition: 0s none;
            transition: 0s none;
     -webkit-animation: 0s none;
             animation: 0s none;

希望对你有帮助:)

【讨论】:

以上是关于ng-show 和 ng-hide 在 Ionic 中很慢。两个元素可见几毫秒(仅在 iOS 中)的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS:ng-show / ng-hide 不适用于` `插值

练习ng-show和ng-hide的方法

何时支持 ng-if 与 ng-show/ng-hide?

无法让 ng-hide 和 ng-show 使用令牌

ng-show和ng-hide的进阶应用

ng-hide / ng-show 中是不是可以使用复杂的表达式?