Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.09.2014, 23:45
Новичок на форуме
Отправить личное сообщение для dkhlus Посмотреть профиль Найти все сообщения от dkhlus
 
Регистрация: 22.09.2014
Сообщений: 6

Как синхронизировать анимацию?
Вот мой код: jsfiddle.net/x14brt2k/1/

Как видно я имею n-элементов, при наведении на которые меняется фоновая картинка. Если я проведу мышкой по всех элементах одновременно, то они все начнут "открываться" и "закрываться".

Как сделать так, чтобы одновременно мог открываться и закрываться только один элемент?

То есть один элемент открывается - другой закрывается. Не может быть такого, что два и больше элемента открываются или закрываются.

Большое спасибо за помощь.

Дополнения: или пусть одновременно можно "открываться" и "закрываться", просто если пользователь открывает элемент А, а затем переключился на B, то начать закрывать элемент А, а не дожидаться его открытия. Как такое сделать?

Последний раз редактировалось dkhlus, 22.09.2014 в 23:57.
Ответить с цитированием
  #2 (permalink)  
Старый 23.09.2014, 00:30
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

<style>
li {
	width: 30px;
	height: 30px;
	float: left;
	background: red;
	border: 2px solid black;
	background-image: url(http://u.jimdo.com/www52/o/s2ba029df7f23bf1c/userlayout/img/arrows.png);
	transition: background-position 0.3s;
}

ul {
	list-style: none;
}
li:hover {
	background-position: -30px;
}
</style>
<ul>
	<li></li>
	<li></li>
	<li></li>
	<li></li>
</ul>
</style>
Ответить с цитированием
  #3 (permalink)  
Старый 23.09.2014, 08:32
Новичок на форуме
Отправить личное сообщение для dkhlus Посмотреть профиль Найти все сообщения от dkhlus
 
Регистрация: 22.09.2014
Сообщений: 6

да, но нужно сделать плавное изменения.
Ответить с цитированием
  #4 (permalink)  
Старый 23.09.2014, 09:25
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Сообщение от dkhlus
Как сделать так, чтобы одновременно мог открываться и закрываться только один элемент?

То есть один элемент открывается - другой закрывается. Не может быть такого, что два и больше элемента открываются или закрываются.
Как ты это себе представляешь?
Навел на один - он открылся...
Навел на другой - но пока не закроется первый, второй не должен открываться?
Тогда, что делать если курсор ведут по этим элементам?
Ответить с цитированием
  #5 (permalink)  
Старый 23.09.2014, 09:38
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Тайминг сократить и все. Уменьшить количество кадров, или времени.
Ответить с цитированием
  #6 (permalink)  
Старый 23.09.2014, 17:43
Новичок на форуме
Отправить личное сообщение для dkhlus Посмотреть профиль Найти все сообщения от dkhlus
 
Регистрация: 22.09.2014
Сообщений: 6

Идею взял с сайта http://www.coolwebmasters.com/
В моем коде, я считаю, проблема в том, что я не могу реализовать такую идею: один элемент открывается, мы резко переключились на второй, а первый должен начать закрываться с того места, до которого он открылся. И наоборот. Можете подправить?

<style>
li {
    width: 30px;
    height: 30px;
    float: left;
    background: red;
    border: 2px solid black;
    background-image: url([url]http://u.jimdo.com/www52/o/s2ba029df7f23bf1c/userlayout/img/arrows.png);[/url]
    transition: background-position 0.3s;
}

ul {
    list-style: none;
}

li:hover {
    background-position: -30px;
}
</style>
<ul>
    <li></li>
    <li></li>
22
    <li></li>
    <li></li>
</ul>
</style>
<stript type="text/javascript">
var elems = document.getElementsByTagName('li');
function setOver(el) {
    el.onmouseover = function(e) {
        var target = e.target || e.srcElement;
        var j = 0;
        //var j = parseInt(el.style.backgroundPosition); //not work
        var t = setInterval(function(){
                if (j == -30) {
                    clearInterval(t);
                }
                j-=1;
                el.style.backgroundPosition = j +'px';
            }, 7);
    }
}

function setOut(el) {
    el.onmouseout = function(e) {
        var target = e.target || e.srcElement;
        var j = -30;
        //var j = parseInt(el.style.backgroundPosition); //not work
        var t = setInterval(function(){
                if (j == 0) {
                    clearInterval(t);
                }
                j+=1;
                el.style.backgroundPosition = j +'px';
            }, 7);
    }
}

for(i=0; i < elems.length; ++i) {
    setOver(elems[i]);
    setOut(elems[i]);
}
</stript>
Ответить с цитированием
  #7 (permalink)  
Старый 23.09.2014, 18:28
Аватар для hfts_rider
Профессор
Отправить личное сообщение для hfts_rider Посмотреть профиль Найти все сообщения от hfts_rider
 
Регистрация: 26.01.2014
Сообщений: 181

При ховере используй "stop()".
Ответить с цитированием
  #8 (permalink)  
Старый 23.09.2014, 18:34
Аватар для hfts_rider
Профессор
Отправить личное сообщение для hfts_rider Посмотреть профиль Найти все сообщения от hfts_rider
 
Регистрация: 26.01.2014
Сообщений: 181

"Пример"
Ответить с цитированием
  #9 (permalink)  
Старый 23.09.2014, 19:17
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от dkhlus
я не могу реализовать такую идею: один элемент открывается, мы резко переключились на второй, а первый должен начать закрываться с того места, до которого он открылся.
разве не это происходит в моём примере?
Ответить с цитированием
  #10 (permalink)  
Старый 23.09.2014, 19:29
Новичок на форуме
Отправить личное сообщение для dkhlus Посмотреть профиль Найти все сообщения от dkhlus
 
Регистрация: 22.09.2014
Сообщений: 6

Вот так мне и нужно, только на чистом js.

Написал второй вариант, но элементы останавливаются в не подходящий момент. (например если водить мишкой туда - сюда по всех элементах)

http://jsfiddle.net/x14brt2k/3/

Как исправить не могу понять.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как поменять анимацию у этого слайдера? Гаджи Элементы интерфейса 3 15.09.2014 13:08
Мотоциклисты есть? l-liava-l Оффтопик 13 04.07.2014 13:35
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
Подскажите как можно реализовать такую анимацию картики ushakofff64rus Общие вопросы Javascript 2 10.09.2013 15:17
Управление скроллом "а-ля тач" HonesT Элементы интерфейса 2 27.08.2013 14:25