У меня есть следующая разметка:
<div class="cube trigger cuberotate">
<div class="face init f z"></div>
<div class="face init l y"></div>
<div class="face init b z"></div>
<div class="face init r y"></div>
<div class="face init u x"></div>
<div class="face init d x"></div>
</div>
Что напоминает 3d-куб, каждое лицо повернуто и переведено в правильное положение, и я позволяю кубу вращаться, используя анимацию на родительском лице.
Вот связанный с ним css:
.cube {
position: absolute;
cursor: pointer;
width: 120px;
height: 120px;
top: 0;
left: 0;
transform-origin: 50% 50%;
transform-style: preserve-3d;
}
.face {
position: absolute;
width: 120px;
height: 120px;
border: 0px solid #fff;
background: #c82222;
transform-origin: 50% 50%;
opacity: 1;
padding: 0px;
-webkit-touch-callout: none;
user-select: none;
transition: all 0.5s ease-out;
}
Я хотел, чтобы куб отображался на одном лице в момент готовности документа, поэтому я просто добавил несколько javascript, в основном интервал каждые 500 мс, который просто удаляет класс .init
, который переопределяет значение opacity: 1
на .face
класс.
(function($) {
'use strict';
// Some selectors and shit...
var $face = $('.face').first(),
speed = 500,
timer = null;
$(document).ready(function(){
// Start showing faces
timer = window.setInterval(function(){
var $next = $face.next();
$face.removeClass('init');
if(!$next.hasClass('face')) {
window.clearInterval(timer);
}
$face = $next;
}, speed);
});
})(jQuery);
// And the additional CSS below
.face.init {
opacity: 0;
}
В идеальном мире этот код должен работать, однако я столкнулся с проблемой в Google Chrome, непрозрачность не переходит к 1 после удаления класса, сохраняя невидимый куб. Если вы щелкните правой кнопкой мыши и осмотрите его, он снова станет видимым.
Любопытно, что в Safari, который также является браузером на основе веб-кита, этого не происходит вообще, и лица показывают один раз, как они должны делать.
Я попытался использовать оба .animate()
из jquery, а также попробовал плагин jquery transit
- Теперь Safari и Chrome не должны вести себя одинаково, или существуют большие различия под капотом, несмотря на то, что движок рендеринга является тем же самым?
- Это что-то я сделал не так?
- Есть ли обходной путь для этого?
Здесь мое перо: http://codepen.io/luigimannoni/pen/FstKG/
Спасибо
Update:
Я пробовал явно на Chrome на моем Mac, а также на Windows 7, и они оба ведут себя одинаково (разные машины также)
Также попробовал Firefox, который работает так же, как Safari, помимо вращающейся анимации, которая не происходит (но я не учитывал Firefox, поскольку это другой браузер).
Дополнительное обновление:
Chrome на мобильных устройствах (как iOS, так и Android) работают и ведут себя как Safari на рабочем столе.
Другое обновление:
После игры вокруг я обнаружил, что это ошибка браузера, Chrome Canary работает нормально, как и ожидалось. Я разместил это на facebook, где у меня есть пара хороших обходных решений от разработчика, которые я нашел довольно творческими.
Первый из них имеет фоновый цвет rgba() и делает альфа-изменение вместо перехода на непрозрачность: http://codepen.io/anon/pen/IjsBL
Вторым был бит javascript-кодирования, заставляющий браузер перерисовывать лица в каждом кадре: http://codepen.io/anon/pen/Hofzb
Я начинаю щедрость, чтобы узнать, что может сделать здесь stackoverflow!