Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.04.2011, 12:49
Профессор
Отправить личное сообщение для Dorian_bs Посмотреть профиль Найти все сообщения от Dorian_bs
 
Регистрация: 24.03.2011
Сообщений: 217

Проблема с show()/hide()
Всем привет. Возникла проблема при использовании функции:

<script type="text/javascript">
$('#kateg-fon').hover(function() {
$('#kat-dop-opt').show(150);
},
function() {
$('#kat-dop-opt').hide(150);
});
</script>


Суть скрипта заключается в том, что при наведении курсора на кнопку открывается дополнительная инфа. Если убираем курсор с кнопки - инфа закрывается.
Это работает.
Но проблема в следующем...
При многоразовом "Наведении/выведении" "туда, сюда" курсора на кнопку инфа начинает открываться, закрываться, открываться, закрываться, и т. д. Она будет открываться и закрываться столько раз, сколько раз мы прошли курсором по кнопке.
Как остановить выполнение функции? Как только мы убираем курсор с кнопки.
Заранее спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 07.04.2011, 13:00
Профессор
Отправить личное сообщение для Matre Посмотреть профиль Найти все сообщения от Matre
 
Регистрация: 07.01.2011
Сообщений: 582

(function () {
	var callee = arguments.callee;
	$("#kateg-fon").one("mouseover mouseout", function () {
		$("#kat-dop-opt")[ event.type == "mouseover" ? "show" : "hide" ](150, callee);
	});
})();
Ответить с цитированием
  #3 (permalink)  
Старый 07.04.2011, 13:22
Профессор
Отправить личное сообщение для Dorian_bs Посмотреть профиль Найти все сообщения от Dorian_bs
 
Регистрация: 24.03.2011
Сообщений: 217

Спасибо, но не помого. Почти все так же.

Последний раз редактировалось Dorian_bs, 07.04.2011 в 13:51.
Ответить с цитированием
  #4 (permalink)  
Старый 07.04.2011, 13:40
Профессор
Отправить личное сообщение для Dorian_bs Посмотреть профиль Найти все сообщения от Dorian_bs
 
Регистрация: 24.03.2011
Сообщений: 217

Я знаю, что "вконтакте" подобная проблема решена. Вот часть их скрипта.
Тут при наведении мышки изменяется цвет фона кнопки
var close_button = ge('im_x');
    var popup_button = ge('im_popup');
    var sound_button = ge('im_sound');

    var fadeToColor = function(color, master) {
      return function() {
        this.fading = master ? true : false;
        animate(this, {backgroundColor: color}, 200);
      }
    }
    addEvent(close_button, 'mouseover', fadeToColor('#FFFFFF'));
    addEvent(close_button, 'mouseout', fadeToColor('#9CB8D4'));
    addEvent(close_button, 'click', im.popup ? function() { window.close(); } : winBoxes.im.hide);
    if (im.popup) {
      hide('im_popup_button');
      im.fix_popup();
      addEvent(window, 'onorientationchange' in window ? 'orientationchange' : 'resize', im.fix_popup);
    } else {
      addEvent(popup_button, 'mouseover', fadeToColor('#FFFFFF'));
      addEvent(popup_button, 'mouseout', fadeToColor('#9CB8D4'));
      addEvent(popup_button, 'click', im.go_popup);

      if (window.im_check) {
        winBoxes.im.setOptions({onHide: function() {
          window.im_ts = im.ts;
          setTimeout(window.im_check, 1000);
        }});
      }
    }
    addEvent(sound_button, 'mouseover', fadeToColor('#FFFFFF'));
    addEvent(sound_button, 'mouseout', fadeToColor('#9CB8D4'));
    addEvent(sound_button, 'click', function() {
      if (im.sound_off) {
        im.sound_off = false;
        ge('im_sound').className = '';
      } else {
        im.sound_off = true;
        ge('im_sound').className = 'off';
      }
    });
Ответить с цитированием
  #5 (permalink)  
Старый 07.04.2011, 13:42
Профессор
Отправить личное сообщение для Matre Посмотреть профиль Найти все сообщения от Matre
 
Регистрация: 07.01.2011
Сообщений: 582

var O = $("#kateg-fon"), S = $("#kat-dop-opt");
O.one("mouseover", function H() {
	S.show(150, function () {
		O.one("mouseout", function (event) {
			if ( $(event.relatedTarget).closest("#kateg-fon").length === 1 ) return O.one("mouseout", arguments.callee);
			S.hide(150, function () {
				O.one("mouseover", H);
			});
		});
	});
});
Ответить с цитированием
  #6 (permalink)  
Старый 07.04.2011, 13:48
Профессор
Отправить личное сообщение для Dorian_bs Посмотреть профиль Найти все сообщения от Dorian_bs
 
Регистрация: 24.03.2011
Сообщений: 217

Спасибо большое! Сейчас все отлично работает!)
Ответить с цитированием
  #7 (permalink)  
Старый 09.04.2011, 11:48
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Для этого есть событие hover():
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(function() {
    var span = $('span');
    $('div').hover(
        function() {span.show()},
        function() {span.hide()}    
    );
});
</script>

<div>text</div>
<span style="display: none;">what is it?</span>
Ответить с цитированием
  #8 (permalink)  
Старый 09.04.2011, 12:39
Профессор
Отправить личное сообщение для Matre Посмотреть профиль Найти все сообщения от Matre
 
Регистрация: 07.01.2011
Сообщений: 582

monolithed, у ТС анимация, а у Вас простое скрытие/показывание.
Ответить с цитированием
  #9 (permalink)  
Старый 09.04.2011, 13:10
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от Matre
у ТС анимация
По уму, если бы Рейсиг не был быдлокодером, то это бы работало на ура:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(function() {
    $('div').hover(function() {
        $('p').animate({
            height: 'toggle',
            opacity: "toggle"
        }, {
            queue: false,
            duration: 500
        });
    });
});
</script>
<style type="text/css">
p {
    background: red;
    width: 100px;
    height: 100px;
}
</style>

<div>text</div>
<p style="display: none;"></p>
Ответить с цитированием
  #10 (permalink)  
Старый 09.04.2011, 13:38
Профессор
Отправить личное сообщение для Matre Посмотреть профиль Найти все сообщения от Matre
 
Регистрация: 07.01.2011
Сообщений: 582

Цитата:
если бы
Но Рейсиг быдлокодер, код не работает и мы вынуждены делать .one() при каждом callback'-е анимации.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с Popup окном vovuslik jQuery 5 12.06.2010 16:12
Проблема с дизайном после отправки xmlhttprequest, Проблема с дизайном после отправки cyberx AJAX и COMET 3 01.05.2010 17:07
Проблема с CSS COKOJIOB (X)HTML/CSS 5 04.08.2009 14:19
Проблема, в менюшке Большой джо Элементы интерфейса 0 12.07.2009 17:12
Проблема спама lliberty AJAX и COMET 1 12.03.2009 16:47