Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.01.2015, 13:03
Кандидат Javascript-наук
Отправить личное сообщение для zhurchik Посмотреть профиль Найти все сообщения от zhurchik
 
Регистрация: 04.06.2011
Сообщений: 116

Плавно выезжающий блок (без jquery и прочих библиотек)
Приветствую Вас, друзья.

У меня никогда не получалось реализовать выплывающий блок, точнее получается, но только он выезжает не плавно, дергается, я не знаю, может быть, я делаю что-то не так.
Вот собственно мой код:
var currentPosition = parseInt(document.getElementById("im").style.top,10);//Получаем текущее положение блока, который будет выплывать

		timer = setInterval(function message()
		{
			currentPosition += 2;

			document.getElementById("im").style.top = currentPosition +"px";//Прибавляем по 2 пиксела с каждым запуском setInterval
		},50);


Что я делаю не так? В какую сторону копать?
Я поставил 2 пиксела и блок все равно подергивается, а мне нужно чтобы блок еще быстрее выплывал

Думаю код HTML не нужен? Если нужен дайте знать.

Последний раз редактировалось zhurchik, 28.01.2015 в 13:07.
Ответить с цитированием
  #2 (permalink)  
Старый 28.01.2015, 13:09
Аспирант
Отправить личное сообщение для d.skuratovich Посмотреть профиль Найти все сообщения от d.skuratovich
 
Регистрация: 19.09.2014
Сообщений: 73

zhurchik, давай сразу весь пример на jsFiddle
Ответить с цитированием
  #3 (permalink)  
Старый 28.01.2015, 13:14
Кандидат Javascript-наук
Отправить личное сообщение для zhurchik Посмотреть профиль Найти все сообщения от zhurchik
 
Регистрация: 04.06.2011
Сообщений: 116

d.skuratovich,
http://jsfiddle.net/fNPvf/11591/
Ответить с цитированием
  #4 (permalink)  
Старый 28.01.2015, 13:17
Аспирант
Отправить личное сообщение для d.skuratovich Посмотреть профиль Найти все сообщения от d.skuratovich
 
Регистрация: 19.09.2014
Сообщений: 73

zhurchik, в общем: ты добьешься максимального эффекта если сделаешь шаг движения минимальным на сколько это возможно, а скорость самой высокой
Ответить с цитированием
  #5 (permalink)  
Старый 28.01.2015, 13:21
Кандидат Javascript-наук
Отправить личное сообщение для zhurchik Посмотреть профиль Найти все сообщения от zhurchik
 
Регистрация: 04.06.2011
Сообщений: 116

d.skuratovich,
Разве разрешено задавать скорость в setInterval "10" или вообще "1"?
Ответить с цитированием
  #6 (permalink)  
Старый 28.01.2015, 13:37
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

setInterval ущербен в анимациях. Вот нормальный пример http://jsfiddle.net/rs24jv0k/

Только позиция должна не каждый раз по пикселю меняться, а вычисляться исходя из пройденного времени с момента начала анимации, и по завершению анимации перестать запрашивать новый кадр.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #7 (permalink)  
Старый 28.01.2015, 13:40
Аспирант
Отправить личное сообщение для d.skuratovich Посмотреть профиль Найти все сообщения от d.skuratovich
 
Регистрация: 19.09.2014
Сообщений: 73

zhurchik, да, можно. ссылка

Пример выше имеет место быть, если тебе не страшна кросс-браузерность
Ответить с цитированием
  #8 (permalink)  
Старый 28.01.2015, 13:44
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от d.skuratovich
Пример выше имеет место быть, если тебе не страшна кросс-браузерность
Пример упрощен. На то он и пример )
В реале надо подключить полифилл. Внутри него ничего необычного нет - все тот же древний setInterval для древних браузеров, плюс избавление от префиксов для не очень старых.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #9 (permalink)  
Старый 28.01.2015, 14:02
Кандидат Javascript-наук
Отправить личное сообщение для zhurchik Посмотреть профиль Найти все сообщения от zhurchik
 
Регистрация: 04.06.2011
Сообщений: 116

danik.js,
Спасибо.
А я совсем и забыл о рекурсии
Ответить с цитированием
  #10 (permalink)  
Старый 28.01.2015, 18:51
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105


<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
</head>

<body>
<div id="im" style="z-index:222;position:fixed;top:-65px;left:0;
width:250px;height:65px;
color:#fff;
border:1px solid #4767AB;
text-shadow: 1px 1px 1px #000;
background:#4c83c3;box-shadow:0 0 2px rgba(0,0,0,0.9);">

		НОВОЕ СООБЩЕНИЕ<br>
		От<br>
		Пан или пропал

</div>
<script>
var element = document.getElementById("im");
function animate(el, to, time) {
  var top = el.offsetTop,
      last = +new Date(),
      tick = function() {
    top += (new Date() - last)*to / time ;
    last = +new Date();
    if (top < 500) {
      (window.requestAnimationFrame && requestAnimationFrame(tick)) || setTimeout(tick, 16)
    }
    else {top = to};
    el.style.top = top + "px" ;
  };

 tick()}
animate(element, 500, 800);
</script>
</body>

</html>

Последний раз редактировалось рони, 28.01.2015 в 22:46.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Существует ли плагин на подобие fancybox без использования jquery protexon jQuery 1 01.06.2014 19:33
Реализация без jQuery IndigoHollow Элементы интерфейса 10 24.12.2013 18:01
На странице подключатся несколько библиотек jQuery и вылазит ошибка hrundel Общие вопросы Javascript 0 22.12.2012 16:50
Блок с сообщением - Javascript или jQuery qwermjk Общие вопросы Javascript 3 12.07.2010 09:48
как сделать аналог jquery.load без jquery? vvsh AJAX и COMET 5 05.06.2009 22:40