Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Расчет положения элемента (https://javascript.ru/forum/events/42512-raschet-polozheniya-ehlementa.html)

Moloch 30.10.2013 00:13

Расчет положения элемента
 
Здравствуйте подскажите пожалуйста как сделать чтобы круг при изменении своего размера всегда оставлся в центре. никак не пойму почему при изменении высоты его позиция по икс и игрек сдвигается
http://jsfiddle.net/aYVtN/

рони 30.10.2013 00:39

Moloch,
зачем делим на 2?

Moloch 30.10.2013 19:22

Все понял. а можете сказать как сделать чтобы когда width\height круга стали равными 0. функция остановилась и возобновилась только при нажатии на кнопку?

рони 30.10.2013 20:46

Цитата:

Сообщение от Moloch
а можете сказать как сделать чтобы когда width\height круга стали равными 0. функция остановилась и возобновилась только при нажатии на кнопку?

сделать ваш код ещё запутанней?! нет проблем
:) ... туда ... сюда ... обратно ...

<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type='text/css'>
    #container{
position:relative;
border: 1px solid #fff;
background-color: #ed7;
width:300px;
height:300px;
overflow:hidden;

}
#krug{
        background:url(http://www.rollogrady.org/media/wp-content/uploads/2008/11/mp3ico-150x150.gif) no-repeat ;
		background-size:contain;
        width: 300px;
        height: 300px;
        position: absolute;
        top: 0;
		left:0;
		opacity: 1;
		border-radius: 50%;
     }
  </style>
  <script>
   var rrr, stop = true;
   function infinityMove() {
   		var div1 = document.getElementById('krug'),
   		    left = parseInt(getComputedStyle(div1).left, 10),
   		    width,
   		    opacity = 1,
   		    max2 = 300,
            z = document.getElementById ('vkl');
   		setTimeout(function timer()
   				{

   						left += (setWay(left, 150, 0))? 1: -1;

   						div1.style.left = left+ 'px';
   						div1.style.top = left+ 'px';
   						//alert(div1.style.left)
   						opacity = 1 - (left/150);
   						width = max2-2*left;
   						div1.style.opacity = opacity;
   						div1.style.width = width + 'px';
   						div1.style.height = width + 'px';

   						stop && (rrr = setTimeout(timer, 10));
  						!stop && (z.value = z.value == 'Туда'? 'Сюда': 'Туда');
   				}, 100
   		);

   }

   var setWay = (function()
   		{

   				var ltr = true;

   				return function(position, firstValue, lastValue) {
   						stop = ltr;
   						if(position >= firstValue) {
   								ltr = false;
   						}
   						if(position <= lastValue) {
   								ltr = true;
   						}
   						stop = (ltr == stop)
   						return ltr;

   				}

   		}
   )();

   function clc()

   {
   		clearTimeout(rrr);
   		infinityMove();

   }
  </script>
</head>

<body>
 <div id ="container">
 <div id="krug"></div>
 </div>
<input id = "vkl" type="button" value="Туда" onclick="clc();">
</body>

</html>

Moloch 30.10.2013 21:33

большое спасибо. я новичок в js а можно ли данный код упростить как? а то я и сам в нем путаюсь

рони 30.10.2013 21:42

Цитата:

Сообщение от Moloch
можно ли данный код упростить

можно но лучше прочитать Основы программной анимации на JavaScript

Moloch 30.10.2013 21:45

пасиба! а то прям не знаю с чего начать js изучать


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