как добиться * плавного * затухания анимации на мобильном телефоне с помощью jquery и css3?
Я знаю, что я могу исчезать и исчезать с jquery, но на мобильном телефоне он будет нервным и как низкий fps или что-то еще. После долгих поисков я обнаружил, что могу использовать переход css3 для перехода к opacitiy 0, но проблема в том, что элемент все равно будет иметь место для себя. даже с видимостью: нет, он сохранит пространство, в котором он был. единственный способ - использовать display: нет, но, как я знаю, я не могу оживить это. Так есть ли способ добиться плавного затухания анимации на мобильном телефоне с помощью комбинация jquery и css3? или хотя бы один? Спасибо.
**EDIT**
: хорошо, ответ на fadeout работает довольно хорошо, теперь fade in будет сладким. проблема в том, что я думаю, что мне нужно pul миллисекундную задержку после ('#id').css('display','block')
и до ('#id').css('opactity','1')
. не если это эффективно и все. но это работает таким образом, но все мои другие анимации не будут работать. все еще в замешательстве.
4 ответов
вы всегда должны пытаться использовать переходы CSS3 вместо анимации jQuery. Здесь я использую переход CSS3 для исчезновения .square
, а затем я жду, пока переход не закончится, чтобы установить display
до none
.
если вы анимируете элемент в jQuery, например, используя fadeOut
, вы увидите, что произойдет. Он в основном устанавливает непрозрачность в 1, а затем уменьшает это значение до 0 с крошечными приращениями. Это очень неэффективно. Поэтому лучше всегда использовать переходы CSS3 и анимации, где это возможно.
Fade out:https://jsfiddle.net/danhaswings/znLL0ws5/1/
Fade in:https://jsfiddle.net/danhaswings/kjgmxa8x/
HTML-код
<div class="square"></div>
в CSS
.square {
width: 100px;
height: 100px;
background-color: red;
transition: opacity 1s ease-in-out;
}
jQuery
var $square = $('.square');
$square.css('opacity', '0');
$square.one("webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend", function() {
$(this).css('display', 'none');
});
какой телефон вы тестируете, чтобы получить такие медленные / нервные анимации? Mine, похоже, отлично работает для всех анимаций, которые поддерживаются в мобильных браузерах.
В любом случае, вы всегда можете попробовать использовать ключевые кадры для CSS.
к сожалению, вы не можете анимировать определенные атрибуты (например,display
), но это позволяет довольно много вещей, включая непрозрачность, как показано под.
div {
width: 100px;
height: 100px;
background: red;
margin: 20px;
}
.to_hide {
-webkit-animation: hide 5s forwards;
animation: hide 2s forwards;
}
@-webkit-keyframes hide {
from {
opacity: 1;
}
40% {
opacity: 0;
}
100% {
position: absolute;
opacity: 0;
}
}
<div class="to_hide"></div>
<div></div>
В конечном счете, на мобильных телефонах вы должны стараться избегать использования анимации, поскольку мобильные браузеры не оптимизированы для таких вещей. Ваш сайт должен изящно деградировать как в размере, макете, контенте, так и в анимации.
должно идти гладко, если вы используете jQuery fadeIn()
, который будет исчезать в элементе сdisplay: none
$element.fadeIn();
function show() {
$("#el").fadeIn();
}
#el {
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button onclick="show()">Show</button>
<div id="el">Hello</div>
посмотреть в этой статье
вы всегда должны избегать анимации свойств, которые вызовут макет или краски, оба из которых дороги и могут привести к пропущенным кадрам.
вы должны быть в состоянии достичь перехода затухания, сочетающего свойства непрозрачности и преобразования