Поворот на 180 градусов возможен только с одной стороны - PullRequest
4 голосов
/ 09 декабря 2011

Я столкнулся с довольно странной проблемой.У меня есть div, который вращается через CSS3.У div есть передний div-потомок и back div-дочерний элемент, при этом задний div имеет -webkit-transform: rotateY( 180deg ) set.

Проблема в том, что когда родительский элемент поворачивается для отображения задней стороны div, он обнаруживает толькощелчки дочерних элементов точно на одной стороне div, особенно во второй половине div или на правой стороне.Передняя сторона div обнаруживает щелчки по всей поверхности элемента.Кроме того, z-индексы в порядке.Я предполагаю, что проблема может быть связана с поворотом и отображением в браузере одной половины стороны «ближе»?

Код, который он взламывает, чрезвычайно сложен, поэтому я создал тестовый файл, чтобы продемонстрировать проблему ниже.Я использую плагин jQuery, который я написал для трехмерных преобразований, который можно найти здесь https://github.com/pwhisenhunt/jquery.transform/blob/master/jquery.transform.js.

Редактировать: После эксперимента нажатие на элемент кнопки регистрируется только от 100-200px, а не от 0-100px.Другими словами, это на самом деле только регистрация во второй половине div.

Любая помощь очень ценится!

<html>
<head>
    <style>
        .element{
            width:200;
            height:200;

            -webkit-perspective: 800;
            -webkit-transform-style: preserve-3d;
        }

        .element figure {
          display: block;
          height: 100%;
          width: 100%;
          position: absolute;
          -webkit-backface-visibility: hidden;
            border:1px solid yellow;
        }

        .element .front {
            -webkit-border-radius:8px;
            padding: 0px;
            margin: 0px;
            background-color:yellow;
            z-index: 9870;
        }

        .element .back {
            -webkit-border-radius:8px;
            padding: 0px;
            margin: 0;
            -webkit-transform: rotateY( 180deg );
            z-index: 0;
            border: 1px solid red;
            background-color:green;
        }
    </style>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
            <script src="https://raw.github.com/pwhisenhunt/jquery.transform/master/jquery.transform.js"></script>
    <script>
        $(function(){
            var temp = false;
            $(".element").click(function(){
                if(temp == false){
                    $(this).transform("setAnimationDuration", 1).transform("rotateY", 180);
                    $(this).unbind("mouseenter mouseleave");
                    button = $(document.createElement('div')).attr("id", "button").css({ width: 200, height: 50, backgroundColor:"blue" });
                    button.click(function(){
                        console.log("Clicking");
                    });
                    temp = true;
                    $(this).append(button);
                }
            })
        })
    </script>
</head>
<body>
    <div class="element">
        <figure class="front"></front>
        <figure class="back"></front>
    </div>
</body>
</html>

JSFiddle ПримерПроблема - можно найти ЗДЕСЬ!

Ответы [ 6 ]

10 голосов
/ 15 мая 2013

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

Решение @ kristiankeane сделало вторую половину недоступной для клика.Я был , используя контейнер для обертки .Оказывается, это странная ошибка в веб-наборе, и я смог исправить ее и сделать клик 100% элемента, изменив transform: rotateY (180deg) на transform: rotateY (-180deg)

Это действительно страннои я не знаю, как это работает, но это было.Я надеюсь, что это помогает кому-то!

4 голосов
/ 30 октября 2012

У меня была точно такая же проблема, я смог ее исправить, слегка изменив ротацию родителей при переворачивании - я изменил

`.flip-holder.flipped {
-webkit-transform: rotateY(180deg);
-moz-transform: rotateY(180deg);
transform: rotateY(180deg);
}`

на

`$.flip-holder.flipped {
-webkit-transform: rotateY(180.5deg);
-moz-transform: rotateY(180.5deg);
transform: rotateY(180.5deg);
}`

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

1 голос
/ 03 января 2014

Немного переведите переднюю и заднюю часть, и они не будут перекрываться.

Пример:

    .element .front {
        -webkit-transform: translateZ(1px);
    }

    .element .back {
        -webkit-transform: rotateY(180deg) translateZ(1px);
    }
1 голос
/ 10 декабря 2011

кажется, что вам не хватает контейнера (почти так же, как я его пропустил).

см. официальная документация

это не внешний элемент, который переворачивается, а обертка внутри него. что, в свою очередь, приводит к отображению одного из двух div (и переходу)

0 голосов
/ 23 октября 2013

После всех трюков as rotate to back и rotate to 180.5 и других ... проблема решена только следующим образом: когда вращение заканчивается - создайте новый элемент, клонируйте html из повернутого элемента и вставьте новый элемент вместо старого

0 голосов
/ 09 декабря 2011

Может быть (и я просто размышляю), что вы должны использовать прямую или делегированную привязку события вместо обычной.Я предполагаю, что событие click может «запоминать» кое-что, как исходное положение div без поворота.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...