Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проблема с show()/hide() (https://javascript.ru/forum/misc/16415-problema-s-show-hide.html)

Dorian_bs 07.04.2011 12:49

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

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


Суть скрипта заключается в том, что при наведении курсора на кнопку открывается дополнительная инфа. Если убираем курсор с кнопки - инфа закрывается.
Это работает.
Но проблема в следующем...
При многоразовом "Наведении/выведении" "туда, сюда" курсора на кнопку инфа начинает открываться, закрываться, открываться, закрываться, и т. д. Она будет открываться и закрываться столько раз, сколько раз мы прошли курсором по кнопке.
Как остановить выполнение функции? Как только мы убираем курсор с кнопки.
Заранее спасибо.

Matre 07.04.2011 13:00

(function () {
	var callee = arguments.callee;
	$("#kateg-fon").one("mouseover mouseout", function () {
		$("#kat-dop-opt")[ event.type == "mouseover" ? "show" : "hide" ](150, callee);
	});
})();

Dorian_bs 07.04.2011 13:22

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

Dorian_bs 07.04.2011 13:40

Я знаю, что "вконтакте" подобная проблема решена. Вот часть их скрипта.
Тут при наведении мышки изменяется цвет фона кнопки
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';
      }
    });

Matre 07.04.2011 13:42

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);
			});
		});
	});
});

Dorian_bs 07.04.2011 13:48

Спасибо большое! Сейчас все отлично работает!)

monolithed 09.04.2011 11:48

Для этого есть событие 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>

Matre 09.04.2011 12:39

monolithed, у ТС анимация, а у Вас простое скрытие/показывание.

monolithed 09.04.2011 13:10

Цитата:

Сообщение от 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>

Matre 09.04.2011 13:38

Цитата:

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


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