Конфликт между -webkit transform и jQuery .animate()

Обновление: я установил скрипку, и она, кажется, работает нормально - раздел, который сначала скользит, содержит карту Google - интересно, действительно ли это проблема...

Недавно я добавил флип -webkit-transform в приложение HTML5, над которым я работаю. Это приводит к неудачному эффекту, когда простая карусель, которая движется горизонтально, демонстрирует странное поведение.

Моя карусель имеет такую ​​структуру

<div id="wrapper">
    <div id="sections">
        <section id="startPage" class="page">
            <div id="card">
                <div class="face front">
                    <p>Some content here</p>
                    <button id="flipFront">A label</button>
                </div>
                <div class="face back">
                    <p>Some content here</p>
                    <button id="flipBack">A label</button>
                </div>
            </div>
        </section>
        <section></section>
        <section></section>
    </div>
</div>

И мое поведение jQuery .click() для его циклического прохождения заключается в следующем:

$('#sections').stop().animate({"left": -($('#someDiv').position().left)}, 500);

Это работает абсолютно нормально, пока я не добавлю CSS -webkit-transform для переворачивания карты:

#startPage {
    -webkit-perspective: 1000;
}

#card {
    height: 940px;
    width: 640px; 
    -webkit-transform-style: preserve-3d;
    -webkit-transition: 0.5s;
}

.back {
    -webkit-transform: rotateY(180deg);
    background-color:#000;
}

.rotated{
    -webkit-transform: rotateY(180deg);
}

.back, .front {
    height: 940px;
    width: 640px; 
}

.face {position: absolute;-webkit-backface-visibility: hidden;}

Теперь моя карта переворачивается нормально, когда я использую

$('#setup, #back').click(function() {
    $('#card').toggleClass('rotated');
});

И моя карусель все еще работает, но, кажется, застряла - например, она частично выскользнет и останется на месте, пока я каким-то образом не буду взаимодействовать с div, после чего она встанет в нужное место.

Кажется, проблема в

-webkit-transform-style: preserve-3d;
-webkit-backface-visibility: hidden;
-webkit-perspective: 1000;

Когда я удаляю их из CSS, карусель работает нормально, а переворот - нет.

Я тестировал как на Safari, так и на Chrome, и результат тот же. Любые мысли будут оценены.

2 ответа

Только с преобразованием webkit можно запутаться, добавить больше информации, например

-webkit-transform: rotateY(180deg) scale(2);
-moz-transform: rotateY(180deg) scale(2);
-o-transform: rotateY(180deg) scale(2);
-ms-transform: rotateY(180deg) scale(2);

Так что это поддерживается большим количеством браузеров, и у вас есть запасной вариант. Я видел эту проблему несколько раз, однако я не могу гарантировать это, поскольку я не проверял это с вашим кодом.

Свойство transform не работает с функцией animate() в jquery, поскольку функция animate() принимает только значения, имеющие числовой характер. например. числовой (например, "margin:30px").

Свойство transform принимает значения, которые не являются числовыми.

Ссылка: http://www.w3schools.com/jquery/eff_animate.asp

Однако вы можете использовать "пошаговую функцию" для достижения эффекта трансформации с помощью анимации или использования плагина Transit. http://ricostacruz.com/jquery.transit/

Надеюсь это поможет.

Другие вопросы по тегам