Javascript.RU

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

Событие "mouseleave" не всегда срабатывает, как побороть?
Есть много блоков, при наводке на которые срабатывает функция по их увеличению. Естественно если мышку уводить с них то все возвращается обратно.

Вот сама функция:

$(document).ready(function(){

	$("#list_wrap").on("mouseenter", ".list_box", function(){
	
			$('.mDem').stop();

			var $startWidth = $(this).find('img').width();
			var $startHeight = $(this).find('img').height();
			var $origWidth = $(this).find('img').attr('width');
			var $origHeight = $(this).find('img').attr('orh');
			
				
			$sdvigLeft = (($origWidth - $startWidth)/2)*(-1);
			$sdvigTop = (($origHeight - $startHeight)/2)*(-1);
			
			$dem = $(this).find('img');
			
			setTimeout(function() {
				$dem.animate({'marginLeft': $sdvigLeft + 'px', 'marginTop': $sdvigTop + 'px', 'width': $origWidth + 'px', 'position': 'absolute', 'maxWidth': '900px'}, 100);
			}, 500);

	}).on('mouseleave', '.list_box', function(){

			$(this).find('img').css({'marginLeft': '0', 'marginTop': '0', 'width': '310px', 'position': 'absolute', 'maxWidth': '100%'});

	});


});


Вот живой пример как все это работает (наброски): http://demotivatory.net/

Все работает как положено, но к сожалению только при условии если водить мышку очень медленно и без резких движений. Если же начать это делать резко и быстро, некоторые блоки не успевают уменьшаться и остаются в увеличенном виде. А еще периодически функция начинает обрабатываться не верно и картинка не сдвигается в нужное положение.

Как-то так, как на скриншоте ниже.

Однако вот тут: http://jquery-gp-gallery.ionelmc.ro/demo/

Как я не пытался подобной проблемы мне повторить не удалось. Подскажите, как нужно модернизировать данную функцию чтобы такой проблемы больше не появлялось?
Изображения:
Тип файла: jpg 12344444.jpg (469.3 Кб, 3 просмотров)

Последний раз редактировалось Alex1233, 06.04.2014 в 14:31.
Ответить с цитированием
  #2 (permalink)  
Старый 06.04.2014, 14:55
Аспирант
Отправить личное сообщение для Alex1233 Посмотреть профиль Найти все сообщения от Alex1233
 
Регистрация: 06.04.2014
Сообщений: 45

Хотелось бы добиться точно такой же работы как в примере (http://jquery-gp-gallery.ionelmc.ro/demo/)
Ответить с цитированием
  #3 (permalink)  
Старый 06.04.2014, 16:01
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Alex1233,
может без скрипта ?
.list_box img {
   -moz-transition: all 1s ease-out;
 -o-transition: all 1s ease-out;
 -webkit-transition: all 1s ease-out;
transition: all 1s ease-out;
 }

.list_box img:hover{
 -webkit-transition-delay: 0.5s;
  -moz-transition-delay: 0.5s;
 -o-transition-delay: 0.5s;
 transition-delay: 0.5s;

 -webkit-transform: scale(1.5);
 -moz-transform: scale(1.5);
 -o-transform: scale(1.5);
 transform: scale(1.5);
 }
Ответить с цитированием
  #4 (permalink)  
Старый 06.04.2014, 16:34
Аспирант
Отправить личное сообщение для Alex1233 Посмотреть профиль Найти все сообщения от Alex1233
 
Регистрация: 06.04.2014
Сообщений: 45

рони, как вариант, спасибо =)

Сейчас поставил Ваш пример, правда немного ускорил его. Не знал что так можно =)

Но я так понимаю в данном случае будут увеличиваться абсолютно все картинки, даже те которые меньше изначальных высоты и ширины. И не до оригинальных размеров картинки, а ровно в 1,5 раза больше тех что были до наводки.

А со скриптом все сложно, парой строк там не отделаться?
Ответить с цитированием
  #5 (permalink)  
Старый 06.04.2014, 16:40
Аспирант
Отправить личное сообщение для Alex1233 Посмотреть профиль Найти все сообщения от Alex1233
 
Регистрация: 06.04.2014
Сообщений: 45

Но в целом мне нравится =) Наверное даже так и оставлю, спасибо большое! =)

====

Но в целях самообучения, на будущее, хотелось бы все таки понять как решать подобные проблемы которые изложены в 1 посте.
Ответить с цитированием
  #6 (permalink)  
Старый 06.04.2014, 16:47
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Сообщение от Alex1233
Но в целях самообучения, на будущее, хотелось бы все таки понять как решать подобные проблемы которые изложены в 1 посте.
посмотрите как сделан таймер тут Разворачивающееся меню
Ответить с цитированием
  #7 (permalink)  
Старый 06.04.2014, 16:55
Аспирант
Отправить личное сообщение для Alex1233 Посмотреть профиль Найти все сообщения от Alex1233
 
Регистрация: 06.04.2014
Сообщений: 45

рони, Вы про эти функции?

setTimeout

и

clearTimeout

Если да, то я смотрю у Вас там как раз сделано как и в примере из моего 1 поста, что я давал (где все работает четко и как положено). Тут.

К сожалению я как не пытался вникнуть в тот код так и не понял как это все работает. Слишком как то все заумно. Но Ваш пример вроде как поменьше/попроще - попробую сейчас его разложить по полочкам, что там и к чему.
Ответить с цитированием
  #8 (permalink)  
Старый 06.04.2014, 17:00
Аспирант
Отправить личное сообщение для Alex1233 Посмотреть профиль Найти все сообщения от Alex1233
 
Регистрация: 06.04.2014
Сообщений: 45

рони, все равно тяжеловато это. Вы не могли бы на моем коде добавить эти функции? Я думаю что я за несколько дней его уже на столько изучил что мне Ваши правки в нем будут куда понятнее.

Был бы Вам очень и очень признателен за это.
Ответить с цитированием
  #9 (permalink)  
Старый 06.04.2014, 17:01
Аспирант
Отправить личное сообщение для Alex1233 Посмотреть профиль Найти все сообщения от Alex1233
 
Регистрация: 06.04.2014
Сообщений: 45

$('.mDem').stop();


Вот это там кстати лишнее, это я эксперементировал - забыл убрать.
Ответить с цитированием
  #10 (permalink)  
Старый 06.04.2014, 17:51
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,109

Alex1233,
$(document).ready(function () {
    var timer;
    $("#list_wrap").on("mouseenter", ".list_box", function () {
        clearTimeout(timer)
       var $dem = $(this).find('img');
        $dem.stop();
        var $startWidth = $dem.width();
        var $startHeight = $dem.height();
        var $origWidth = $dem.attr('width');
        var $origHeight = $dem.attr('orh');
        $origWidth < $startWidth && ($origWidth = $startWidth * 1.2);
        $origHeight < $startHeight && ($origHeight = $startHeight * 1.2);
        $sdvigLeft = (($origWidth - $startWidth) / 2) * (-1);
        $sdvigTop = (($origHeight - $startHeight) / 2) * (-1);
        timer = setTimeout(function () {
            $dem.animate({
                'marginLeft': $sdvigLeft + 'px',
                'marginTop': $sdvigTop + 'px',
                'width': $origWidth + 'px',
                'position': 'absolute',
                'maxWidth': '900px'
            }, 100);
        }, 500);
    }).on('mouseleave', '.list_box', function () {
        clearTimeout(timer)
        $(this).find('img').stop().css({
            'marginLeft': '0',
            'marginTop': '0',
            'width': '310px',
            'position': 'absolute',
            'maxWidth': '100%'
        });
    });
});

Последний раз редактировалось рони, 06.04.2014 в 17:54.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как побороть "активированный" DIV? XPyCTang Events/DOM/Window 1 21.11.2012 13:01
Как вызвать событие после события определенного в onchange Наталья Events/DOM/Window 2 12.09.2009 13:51
как проверить поддеружет браузер определенное событие? GOll Элементы интерфейса 9 24.07.2008 14:40
Как вставить событие внутрь document.write Vivasvan Events/DOM/Window 8 13.06.2008 20:02
Как обработать событие Cresh Events/DOM/Window 1 31.05.2008 06:17