Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 10.03.2016, 07:49
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

рони,
Если все вылизать - ТС нечего делать будет, а так - простор для творчества

Последний раз редактировалось Dilettante_Pro, 10.03.2016 в 10:16.
Ответить с цитированием
  #12 (permalink)  
Старый 10.03.2016, 11:19
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Топикстартер молчит, поэтому - спецвариант, чтобы глаза рони не утомлять
<!DOCTYPE HTML>
<html>
<head>
<title>Перемещение круга</title>
<style type="text/css" >
 
.svgcircle
{
position: absolute;
}

.circle, .rect, .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 setNewAttr(elem) {
        $(elem).attr({
            cx: Math.random() * 500,
            cy: Math.random() * 500,
            x: Math.random() * 500,
            y: Math.random() * 500,
            fill: randomRGBColor()
        });
    }
    function randomRGBComponent() {
        return Math.round(Math.random() * 255);
    }
    function randomRGBColor() {
        return 'rgb(' + randomRGBComponent() + ', ' + randomRGBComponent() + ', ' + randomRGBComponent() + ')';
    }
    $("html").on("click", ".circle", function () {
        setNewAttr(this);
        var r = document.createElementNS("http://www.w3.org/2000/svg", "rect");
        $(r).attr({
            class: "rect",
            x: Math.random() * 500,
            y: Math.random() * 500,
            width: "35",
            height: "35",
            fill: randomRGBColor()
        });
        $('svg').append(r);
    });
    $("html").on("click", ".rect", function () {
        setNewAttr(this);
        var r = document.createElementNS("http://www.w3.org/2000/svg", "ellipse");
        $(r).attr({
            class: "ellipse",
            cx: Math.random() * 500,
            cy: Math.random() * 500,
            rx: "50",
            ry: "25",
            fill: randomRGBColor()
        });
        $('svg').append(r);
    });
    $("html").on("click", ".ellipse", function () {
        setNewAttr(this);
        var r = document.createElementNS("http://www.w3.org/2000/svg", "circle");
        $(r).attr({
            class: "circle",
            cx: Math.random() * 500,
            cy: Math.random() * 500,
            r: "35",
            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>

Последний раз редактировалось Dilettante_Pro, 10.03.2016 в 15:36.
Ответить с цитированием
  #13 (permalink)  
Старый 10.03.2016, 11:47
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,074

Dilettante_Pro,
маловато будет строки 40, 41, 42, 45, повторяются значит их тоже можно вынести в отдельную функцию createAndsetNewAttr(options, elem) , нет элемента создаём, есть options ставим из options иначе по умолчанию
Ответить с цитированием
  #14 (permalink)  
Старый 10.03.2016, 11:55
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

рони,
Новые атрибуты устанавливаются на существующий кликнутый элемент для transition. Новый элемент другого типа по клику создается всегда.
В строках 41, 40 - x и у, в других - cx cy.
Можно, конечно, в функцию createAndsetNewAttr поместить наборы опций для всех типов создаваемых элементов - но мне что-то не хочется.. да и времени особо нет

Последний раз редактировалось Dilettante_Pro, 10.03.2016 в 12:04.
Ответить с цитированием
  #15 (permalink)  
Старый 10.03.2016, 12:15
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,074

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

Эксклюзивно для рони, чисто из любви к искусству
<!DOCTYPE HTML>
<html>
<head>
<title>Перемещение круга</title>
<style type="text/css" >
 
.svgcircle
{
position: absolute;
}

.circle, .rect, .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 createAndsetNewAttr(elem,elemNew) {
       $(elem).attr({
           cx: Math.random() * 500,
           cy: Math.random() * 500,
           x: Math.random() * 500,
           y: Math.random() * 500,
           fill: randomRGBColor()
       });
       var r = document.createElementNS("http://www.w3.org/2000/svg", elemNew);
        $(r).attr({
           class: elemNew,
           x: Math.random() * 500,
           y: Math.random() * 500,
           cx: Math.random() * 500,
           cy: Math.random() * 500,
           fill: randomRGBColor()
       });
       switch (elemNew) {
          case "rect":
             $(r).attr({
                width: "35",
                height: "35"
             });
             break;
          case "ellipse":
             $(r).attr({
                rx: "50",
                ry: "25"
             });
             break;
          case "circle":
             $(r).attr({
                r: "35"
             });
       }
       $('svg').append(r);
    }
    function randomRGBComponent() {
        return Math.round(Math.random() * 255);
    }
    function randomRGBColor() {
        return 'rgb(' + randomRGBComponent() + ', ' + randomRGBComponent() + ', ' + randomRGBComponent() + ')';
    }
    $("html").on("click", ".circle", function () {
        createAndsetNewAttr(this, "rect");
    });

    $("html").on("click", ".rect", function () {
        createAndsetNewAttr(this, "ellipse");
     });
 
    $("html").on("click", ".ellipse", function () {
        createAndsetNewAttr(this, "circle");
    });
</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>

Только не говорите, что Math.random() * 500 можно заменить функцией

Последний раз редактировалось Dilettante_Pro, 10.03.2016 в 16:01.
Ответить с цитированием
  #17 (permalink)  
Старый 10.03.2016, 16:05
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,074

Сообщение от Dilettante_Pro
Только не говорите, что Math.random() * 500 можно заменить функцией
да и эта функция в строке 60, немного только подправить
Ответить с цитированием
  #18 (permalink)  
Старый 11.03.2016, 04:53
Интересующийся
Отправить личное сообщение для Eadweard Посмотреть профиль Найти все сообщения от Eadweard
 
Регистрация: 16.02.2016
Сообщений: 19

Всем спасибо. Взял лучший вариант
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При клике появлялся новый элемент (бесконечно) Eadweard Элементы интерфейса 3 16.02.2016 08:13
SVG CSS, SVG to WOFF kobezzza Firefox/Mozilla 2 29.03.2013 15:59
масштабирование и фон в svg vogdb Элементы интерфейса 0 04.02.2012 17:10
Inline SVG as background Paguo-86PK Элементы интерфейса 0 16.12.2011 20:12