2016-06-03 1 views
0

У меня есть несколько проблем с поведением перехода, возможно, это одна и та же проблема. Первый класс проблем с короткими переходами.Несоответствие перехода

<style> 
.someclass { 
    transition: all 1s linear; 
} 
</style> 
<script> 
function activationcode() 
{ 
    //$('.someclass').hide(); was in display none state. 
    $('.someclass').css('opacity', 0); 
    $('.someclass').show(); 
    $('.someclass').css('opacity', 1); 
} 
</script> 

Добавить в большинстве случаев этот код не работает должным образом. Элемент .someclass отображается в конечном состоянии. Меняющееся свойство не имеет значения, например, opacity. Чтобы заставить его работать, две вещи помогают: а) изменить all для перехода к конкретному свойству, для этого примера - opacity; б) позвонить $('.someclass').css('opacity', 1); с задержкой, например, 100 мс. Но это только уменьшает вероятность проблемы до очень низкого значения, не исправляет ее.

Второй класс проблемы - для длительной анимации. Он работает, но если вы поместите его во вкладку (или что-то в этом роде) и начнете переключать с анимированной вкладки на другую, анимация может быть закончена в конечном состоянии до указанного времени. Одиночный переключатель/отключение обычно не прерывает анимацию. Но два или более переключателя имеют очень высокую вероятность.

Я могу воспроизвести это на Firefox (не совсем недавно). Первоначально сообщалось для Chrome (репортер заявляет, что использует последнюю версию).

Я подозреваю, что проблема зависит от количества операций css/js на странице (не удалось воспроизвести вторую проблему с минимальным jsfiddle).

Итак, вопрос в том, как исправить такие проблемы, существует ли какое-либо решение?

+0

Вы забыли ':' после 'перехода'? – Kulvar

+0

@kulvar спасибо. –

ответ

0

Место линия ...

$('.someclass').css('opacity', 1); 

... в setTimeout(fn, 0). Это отсрочит выполнение, гарантируя, что браузер не будет оптимизировать эти шаги в одну краску (покажите элемент со 100% непрозрачностью).

+0

Я так и делаю, но в некоторых случаях это похоже даже на задержку в 100 мс, которую я обычно использую недостаточно. –

0

Я предлагаю вам использовать классы, а и обрабатывать показать/скрыть в CSS только

.hide { 
    display: none; 
    opacity: 0; 
    transition: opacity 1s linear 0s, display 0s linear 1s; 
    /* decrease opacity, then change display with a delay */ 
} 
.show { 
    display: block; 
    opacity: 1; 
    transition: display 0s linear 0s, opacity 1s linear 0s; 
    /* change display instantly without delay, then increase opacity */ 
} 

Затягивания скрытия для 1s, вы позволяете переход непрозрачности завершить до сокрытия его. Но мы сбросили задержку на показе, потому что нам нужны люди, чтобы увидеть непрозрачность.

+0

Требуется ли этой технике обходное решение setTimeout? Я специально не тестировал, но похоже, что проблема заключалась не только при установке непрозрачности на 1 сразу после установки непрозрачности в 0 для запуска перехода. Вероятность того, что проблема также возникла, когда браузер занят другой деятельностью на странице. –

+0

Для этого вам не нужен тайм-аут. Четвертый параметр - это задержка перехода, и мы используем его, чтобы исчезновение произошло до полного скрытия блока. Просто измените класс элемента на JS. Навигатор будет обрабатывать сам переход, даже если он занят чем-то другим. Это намного более гладко, чем делать это с JS в любом случае, так как браузер может оптимизировать его сам. – Kulvar

+0

Как насчет переключателя табуляции, есть ли у вас какие-либо идеи? –

 Смежные вопросы

  • Нет связанных вопросов^_^