Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Плавное сжимание изображения (https://javascript.ru/forum/misc/37408-plavnoe-szhimanie-izobrazheniya.html)

flasher167 18.04.2013 17:26

Плавное сжимание изображения
 
Есть круг. Он поделен на 4 сектора, нужно что бы при наведении на определенный сектор он начал сжиматься к центру.
Проблема в том что не знаю как сделать сжатие и как разместить изображения по кругу что бы выгладил круг.
<html> 
    <body> 
        <div style = "border: 1px solid gray; position: absolute; left: 0; top: 0; width: 402; height: 402;" onmousemove = "x = event.x; y = event.y" onmouseout = "x = y = 0"> 
            <script> 
                var n = 5;
                var x = 0, y = 0;
                var r = new Array(100, 100, 100, 100, 100);
                
                for (var i = 0; i < n; i++) document.writeln("<img id = div" + i + " style = 'border: 0px; position: absolute; left: 100; top: 100; width: 200; height: 200;' src = " + i + "_" + n + ".png>");
                
                window.setInterval("tick()", 10);
                
                function tick() {
                    var i = (Math.ceil(Math.atan2(x - 200, y - 200) / Math.PI / 2 * n) + n) % n;
                    var s = Math.sqrt((x - 200) * (x - 200) + (y - 200) * (y - 200));
                    if (s < r[i])
                        setRad(i, Math.min(r[i] + 3, 200));
                }
                
                function reset() {
                    for (var i = 0; i < n; i++)
                        setRad(i, 100)
                }
                
                function setRad(i, rad) {
                    r[i] = rad;
                    with (document.getElementById("div" + i).style) {
                        left = top = 200 - r[i];
                        width = height = 2 * r[i];
                    }
                }
            </script> 
        </div> 
        <input type = button onclick = "reset()" value = "Reset" style = "position: absolute; left: 10; top: 410"> 
    </body> 
</html>

изображения имеют имя 1_5.png 2_5.png и т.д

flasher167 19.04.2013 15:37

или можно как то по другому это сделать?

danik.js 19.04.2013 16:29

Например на svg?

tsigel 19.04.2013 16:31

Или на canvas

Dim@ 19.04.2013 17:01

tsigel,
SVG вроде лучше подходит для этих целей

tsigel 19.04.2013 17:06

Возможно. Честно говоря я не особо знаю как работать с svg, просто я заметил что некоторые вещи сделанные на нем не работают в некоторых версиях ie (хотя возможно что это по причине криворукости разработчиков), а canvas со скриптом для ie < 9 работает более-менее стабильно (если конечно не считать что скорость работы на ie < 9 оставляет желать лучшего).

Dim@ 19.04.2013 17:12

tsigel,
SVG в ИЕ ВООБЩЕ НЕТ - там есть аналог svg - vmg или что-то типо того

tsigel 19.04.2013 17:14

То-то оно не работает :haha:

Dim@ 19.04.2013 17:15

tsigel,
На ИЕ либо забивают, либо делают альтернативу;)

tsigel 19.04.2013 17:17

Dim@,
Спасибо, буду иметь в виду.


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