Показать сообщение отдельно
  #7 (permalink)  
Старый 09.03.2016, 17:52
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Сообщение от Dilettante_Pro
Более "правильный" вариант svg-клонирования - с использованием defs и use - завтра нарисую, сейчас некогда.
Насчет рисования "правильного" варианта я погорячился - динамически созданный use не хочет нормально отображаться, несмотря на все танцы с бубнами. В результате нарисовал более-менее приличный вариант создания новых элементов svg без какого-либо клонирования

<!DOCTYPE HTML>
<html>
<head>
<title>Перемещение круга</title>
<style type="text/css" >
 
.svgcircle
{
position: absolute;
}
.circle
{   -webkit-transition:all 3s cubic-bezier(0, 0, 1, 1);
    -moz-transition:all 3s cubic-bezier(0, 0, 1, 1);
    -o-transition:all 3s cubic-bezier(0, 0, 1, 1);
    transition:all 3s cubic-bezier(0, 0, 1, 1);
}

.rect
{
   -webkit-transition: all 3s cubic-bezier(0, 0, 1, 1);
   -moz-transition:all 3s cubic-bezier(0, 0, 1, 1);
   -o-transition:all 3s cubic-bezier(0, 0, 1, 1);
   transition:all 3s cubic-bezier(0, 0, 1, 1);
}
.ellipse
{
   -webkit-transition: all 3s cubic-bezier(0, 0, 1, 1);
   -moz-transition:all 3s cubic-bezier(0, 0, 1, 1);
   -o-transition:all 3s cubic-bezier(0, 0, 1, 1);
   transition:all 3s cubic-bezier(0, 0, 1, 1); 
}

</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>

<script>
    function randomRGBComponent() {
        return Math.round(Math.random() * 255);
    }
    function randomRGBColor() {
        return 'rgb(' + randomRGBComponent() + ', ' + randomRGBComponent() + ', ' + randomRGBComponent() + ')';
    }
    $("html").on("click", ".circle", function () {
        this.setAttribute("cx", Math.random() * 500);
        this.setAttribute("cy", Math.random() * 500);
        this.setAttribute("fill", randomRGBColor());
        var r = document.createElementNS("http://www.w3.org/2000/svg", "rect");
        r.setAttribute("class", "rect");
        r.setAttribute("x", Math.random() * 500);
        r.setAttribute("y", Math.random() * 500);
        r.setAttribute("width", "35");
        r.setAttribute("height", "35");
        r.setAttribute("fill", randomRGBColor());
        $('svg').append(r);
    });
    $("html").on("click", ".rect", function () {
        this.setAttribute("x", Math.random() * 500);
        this.setAttribute("y", Math.random() * 500);
        this.setAttribute("fill", randomRGBColor());
        var r = document.createElementNS("http://www.w3.org/2000/svg", "ellipse");
        r.setAttribute("class", "ellipse");
        r.setAttribute("cx", Math.random() * 500);
        r.setAttribute("cy", Math.random() * 500);
        r.setAttribute("rx", "50");
        r.setAttribute("ry", "25");
        r.setAttribute("fill", randomRGBColor());
        $('svg').append(r);
    });
    $("html").on("click", ".ellipse", function () {
        this.setAttribute("cx", Math.random() * 500);
        this.setAttribute("cy", Math.random() * 500);
        this.setAttribute("fill", randomRGBColor());
        var r = document.createElementNS("http://www.w3.org/2000/svg", "circle");
        r.setAttribute("class", "circle");
        r.setAttribute("cx", Math.random() * 500);
        r.setAttribute("cy", Math.random() * 500);
        r.setAttribute("r", "35");
        r.setAttribute("fill", randomRGBColor());
        $('svg').append(r);
    });
</script>
</head>
<body>
   <svg version="1.1" baseProfile="full" width ="600" height ="600" class="svgcircle">
      <circle class="circle" cx="300" cy="300" r="35" fill="red"/>
   </svg>
</body>
</html>
Ответить с цитированием