Показать сообщение отдельно
  #1 (permalink)  
Старый 17.07.2013, 18:43
Интересующийся
Отправить личное сообщение для Sam L Посмотреть профиль Найти все сообщения от Sam L
 
Регистрация: 14.02.2013
Сообщений: 15

Flip эффект кроссбраузерно
Попробовал реализовать flip эффект на чистом сss - не работает в опере, перепробовал разные варианты, остановился на rotate3di.js.

Но вот загвоздка - если использовать unflip или toggle - обратный поворот не срабатывает в опере (т.е. в одну сторону нормально вращается, в другую - просто hide/show).

HTML вот такой:
<ul id="Sparks" class="nav-list-example">
        <li>
            <div class="front"><img src="./img/Sparks01.jpg"/></div>
            <div class="back"><img src="./img/Sparks00.jpg"/></div>
        </li>
</ul>


СSS:

.nav-list-example {
width: 100%;
margin: 0;
padding: 0;
}

.nav-list-example div {
width:100%;
float: left;
position: relative;
border: 1px solid #000;
}

.nav-list-example li div {
top:0;
left:0;
width: 100%;
overflow: hidden;
background: transparent;
position: absolute;
}

.nav-list-example li div.back {
left: -999em;
background: transparent;
}

Скрипт:

$(document).ready(function () {
    $('.nav-list-example li div.back').hide().css('left', 0);

    function mySideChange(front) {
        if (front) {
            $(this).parent().find('div.front').show();
            $(this).parent().find('div.back').hide();

        } else {
            $(this).parent().find('div.front').hide();
            $(this).parent().find('div.back').show();
        }
    }

    $('.nav-list-example li').hover(
        function () {
            $(this).find('div').stop().rotate3Di('flip', 750, {direction: 'clockwise', sideChange: mySideChange});
        },
        function () {
            $(this).find('div').stop().rotate3Di('unflip', 1000, {sideChange: mySideChange});
        }
    );
});


В опере, мозилле, работает, если не использовать unflip или toggle, но в хроме и сафари после первого переворота - второй и последующий - двойные (картинка дважды вращается и показывается правильная сторона).... Скрипт меняю вот так:
$(document).ready(function () {
    $('.nav-list-example li div.back').hide().css('left', 0);

    function mySideChange(front) {
        if (front) {
            $(this).parent().find('div.front').show();
            $(this).parent().find('div.back').hide();

        } else {
            $(this).parent().find('div.front').hide();
            $(this).parent().find('div.back').show();
        }
    }

    function mySideChangeBack(front) {
        if (front) {
            $(this).parent().find('div.front').hide();
            $(this).parent().find('div.back').show();

        } else {
            $(this).parent().find('div.front').show();
            $(this).parent().find('div.back').hide();
        }
    }

    $('.nav-list-example li').hover(
        function () {
            $(this).find('div').stop().rotate3Di('flip', 750, {direction: 'clockwise', sideChange: mySideChange});
        },
        function () {
            $(this).find('div').stop().rotate3Di('flip', 1000, {sideChange: mySideChangeBack});
        }
    );
});


Подскажите, что изменить? ну или скрипт, который кроссбраузерный...
Ответить с цитированием