Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Анимация, сбросить width (https://javascript.ru/forum/dom-window/60199-animaciya-sbrosit-width.html)

Decode 16.12.2015 16:43

Анимация, сбросить width
 
Как у дива сбросить width после второго клика, ну т.е. когда ширина уменьшается надо сбросить elem.style.width = '', чтобы следующий клик увеличивал?

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8" />
    <title></title>
    <style>
        div {
            height: 50px;
            width: 50px;
            background: #336699;
            cursor: pointer;
            border-radius: 5px;
            text-align: center;
            line-height: 50px;
            color: white;
            font-weight: bold;
            box-sizing: border-box;
            border: 2px solid #ccc;
        }
    </style>
</head>
<body>
    <div></div>

    <script>
        var div = document.body.children[0];

        div.dataset.width = Math.round(div.offsetWidth / document.documentElement.clientWidth * 100);
        div.innerHTML = div.dataset.width + '%';

        div.onclick = function() {
            foo(this, 75);
        };

        function foo(elem, num) {
            if (elem.isAnimate) return;

            elem.isAnimate = true;

            var i = elem.style.width ? num : +elem.dataset.width,
                direction = elem.style.width ? -1 : 1;

            function bar() {
                elem.style.width = elem.innerHTML =  i + '%';
                
                i += direction;

                (i <= num && i >= +elem.dataset.width) ? requestAnimationFrame(bar) : elem.isAnimate = null;
            }

            requestAnimationFrame(bar);
        }
    </script>
</body>
</html>

рони 16.12.2015 17:54

Decode,
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8" />
    <title></title>
    <style>
        div {
            height: 50px;
            width: 50px;
            background: #336699;
            cursor: pointer;
            border-radius: 5px;
            text-align: center;
            line-height: 50px;
            color: white;
            font-weight: bold;
            box-sizing: border-box;
            border: 2px solid #ccc;
        }
    </style>
</head>
<body>
    <div></div>

    <script>
        var div = document.body.children[0], direction;

        div.dataset.width = Math.round(div.offsetWidth / document.documentElement.clientWidth * 100);
        div.innerHTML = div.dataset.width + '%';

        div.onclick = function() {
            foo(this, 75);
        };

        function foo(elem, num) {
            if (elem.isAnimate) return;

            elem.isAnimate = true;

            var i = elem.style.width != (num+'%') ? (direction = 1,+elem.dataset.width  ): (direction = -1,num );


            function bar() {
                elem.style.width = elem.innerHTML =  i + '%';

                i += direction;

                (i <= num && i >= +elem.dataset.width) ? requestAnimationFrame(bar) : elem.isAnimate = null;
            }

            requestAnimationFrame(bar);
        }
    </script>
</body>
</html>

Decode 16.12.2015 18:35

рони, thanks :victory:


Часовой пояс GMT +3, время: 20:45.