Javascript.RU

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

Событие при наведение мыши, которое раскроет содержимое блока (элемента)...
Привет Всем, помогите пожалуйста. Нужно сделать (доделать) скрипт, чтобы при наведении на первый блок <div> показывалось его содержимое, а при наведении на содержимое - блок не закрывался. Будет 3-5 блоков, расположенных вниз один за другим. При этом надо, чтобы при наведении на первый (и т.д.) блок - остальные не открывались.
<html>
<head>
<style type="text/css">
div.txt {
	
        height: 20px;
	border: 1px solid;
}
div.box {
	
	
	background-color: ;
	display: none;
        border: 0px;
}
</style>
<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js'
type='text/javascript'></script>
<script type="text/javascript">
function posMouse(e){
 var mouX = 0, mouY = 0;
 if (!e) e = window.event;
 if (e.pageX || e.pageY) {
  mouX = e.pageX;
  mouY = e.pageY;
 } else if (e.clientX || e.clientY) {
  mouX = e.clientX + (document.documentElement.scrollLeft
  || document.body.scrollLeft) - document.documentElement.clientLeft;
  mouY = e.clientY + (document.documentElement.scrollTop
  || document.body.scrollTop) - document.documentElement.clientTop;
 }
 return {"x":mouX, "y":mouY}
}

$(document).ready(function(){
 $('div.txt').mouseover(function(){
  $(this).next().slideDown('slow');
 })
 .mouseout(function(e){
  var elem = $(this).next(), mou = posMouse(e);
  if ((mou.x < elem.offset().left) || (mou.x > elem.offset().left + elem.width())
  || (mou.y < elem.offset().top))
   elem.slideUp('slow');
 });
 $('div.box').mouseleave(function(){
  $(this).slideUp('slow');
 });
});
</script>
</head>
<body>

<div class='txt'>Новость 1</div>
<div class='box'>Описание 1</div>
<div class='txt'>Новость 2</div>
<div class='box'>Описание 2</div>
<div class='txt'>Новость 3</div>
<div class='box'>Описание 3</div>

</body>
</html>
Ответить с цитированием
  #2 (permalink)  
Старый 25.03.2012, 19:40
Лаборант :-)
Отправить личное сообщение для Pavel M. Посмотреть профиль Найти все сообщения от Pavel M.
 
Регистрация: 08.11.2011
Сообщений: 806

Сообщение от aklak
Нужно сделать (доделать) скрипт, чтобы при наведении на первый блок <div> показывалось его содержимое, а при наведении на содержимое - блок не закрывался. Будет 3-5 блоков, расположенных вниз один за другим. При этом надо, чтобы при наведении на первый (и т.д.) блок - остальные не открывались.
можно так, по-моему проще

<!DOCTYPE html>
<html>
<head>
	<style>
		div.txt {
			height: 20px;
			border: 1px solid;
		}
		div.box {
			display: none;
		}
	</style>
	<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js'></script>
	<script>
		$(function () {
		  $('.item').hover(function () {
			$('.box', this).slideDown('slow');
		  }, function () {
			$('.box', this).slideUp('slow'); 
		  });                
		});
	</script>
</head>
<body>
 
	<div class='item'>
	  <div class='txt'>Новость 1</div>
	  <div class='box'>Описание 1</div>
	</div>

	<div class='item'>
	  <div class='txt'>Новость 2</div>
	  <div class='box'>Описание 2</div>
	</div>
	  
	<div class='item'>
	  <div class='txt'>Новость 3</div>
	  <div class='box'>Описание 3</div>
	</div>

</body>
</html>
Ответить с цитированием
  #3 (permalink)  
Старый 25.03.2012, 19:51
Новичок на форуме
Отправить личное сообщение для aklak Посмотреть профиль Найти все сообщения от aklak
 
Регистрация: 25.03.2012
Сообщений: 2

Сообщение от Pavel M. Посмотреть сообщение
можно так, по-моему проще
...
Спасибо за попытку помочь, но твой вариант как гармошка. А мне как раз надо защита от "гармошки", то есть когда пользователь проводит по всем элементам сразу и быстро, чтобы ничего не раскрывалось, а когда он остановился на элементе больше 1-2 сек - чтобы он раскрылся. В твоем варианте если раза 3 быстро провести вверх-вниз, а потом убрать мышь, то "гармошка" продолжает играть еще 3 раза. В мной приведенном скрипте такая же ошибка. Просто скрипт запоминает, сколько я раз провел по элементу div.text и, не успевая проиграть анимацию, продолжает её проигрывать после отведения мыши. Как бы это исправить?

Последний раз редактировалось aklak, 25.03.2012 в 19:56.
Ответить с цитированием
  #4 (permalink)  
Старый 27.03.2012, 11:30
Лаборант :-)
Отправить личное сообщение для Pavel M. Посмотреть профиль Найти все сообщения от Pavel M.
 
Регистрация: 08.11.2011
Сообщений: 806

сделайте например задержку открытия на пару секунд
<!DOCTYPE html>
<html>
<head>
    <style>
        div.txt {
            height: 20px;
            border: 1px solid;
        }
        div.box {
            display: none;
        }
    </style>
    <script src='http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js'></script>
    <script>
        $(function () {
          $('.item').hover(function () {
*!*
            $('.box', this).delay(2000).slideDown('slow');
*/!*
          }, function () {
            $('.box', this).stop(true, true).slideUp('slow');
          });               
        });
    </script>
</head>
<body>
  
    <div class='item'>
      <div class='txt'>Новость 1</div>
      <div class='box'>Описание 1</div>
    </div>
 
    <div class='item'>
      <div class='txt'>Новость 2</div>
      <div class='box'>Описание 2</div>
    </div>
       
    <div class='item'>
      <div class='txt'>Новость 3</div>
      <div class='box'>Описание 3</div>
    </div>
 
</body>
</html>
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
событие, которое срабатывает при изменении DOM структуры amigo* Events/DOM/Window 30 11.04.2017 13:39
Два блока div разъезжаются при скроллинге окна браузера. call007 jQuery 0 03.04.2011 16:21
Событие mouseout при наведении мыши на пункт меню WalterScott Events/DOM/Window 2 12.05.2009 22:05
Динамическое изменение размеров блока при наведении мыши! Viktor ------- Общие вопросы Javascript 7 05.05.2009 19:13
Не отрабатывает событие onmouseout при внедрении нового слоя ilshat Элементы интерфейса 3 28.07.2008 06:27