Javascript.RU

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

События mouseover/out
Добрый день, подскажите пожалуйста, как сделать так, что бы при наведении на основной блок, появлялся вложенный блок с текстом (как в примере), но не исчезал при наведении на img или на сам текст. Надеюсь, выразился понятно. Спасибо.

<head>
    <link rel="stylesheet" href="style.css">
    <script src="script.js"></script>
    <style>
      .border {
       border: 2px solid #000000;
        width: 100px;
        height: 100px;
      }
      .border img {
        width: 50px;
        height: 50px;
      }
      .text {
        display:none;
      }
      .text.open {
        display: block;
      }
    
      
    </style>
  </head>

  <body>
<div class="border">
  <img src='#'>
  <div class='text'>first</div>
</div>
<div class="border">
  <img src='#'>
  <div class='text'>second</div>
</div>
<div class="border">
  <img src='#'>
  <div class='text'>third</div>
</div>
<script>

    var myLink = document.querySelectorAll('.border');
    for (i = 0; i < myLink.length; i++) {
    myLink[i].addEventListener('mouseover', function(e) {
        e.target.querySelector('.text').classList.add('open');
    });
     myLink[i].addEventListener('mouseout', function(e) {
        e.target.querySelector('.text').classList.remove('open');
    });
   
    }


    
</script>
  </body>
Ответить с цитированием
  #2 (permalink)  
Старый 28.06.2017, 19:53
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

JohnJohn, использовать события mouseenter/mouseleave вместо mouseover/mouseout. А вообще это проще сделать через CSS.
Ответить с цитированием
  #3 (permalink)  
Старый 28.06.2017, 19:56
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

<head>
    <link rel="stylesheet" href="style.css">
    <script src="script.js"></script>
    <style>
      .border {
       border: 2px solid #000000;
        width: 100px;
        height: 100px;
      }
      .border img {
        width: 50px;
        height: 50px;
      }
      .text {
        display:none;
      }
      .text.open {
        display: block;
      }
    
      
    </style>
  </head>

  <body>
<div class="border">
  <img src='#'>
  <div class='text'>first</div>
</div>
<div class="border">
  <img src='#'>
  <div class='text'>second</div>
</div>
<div class="border">
  <img src='#'>
  <div class='text'>third</div>
</div>
<script>

    var handle = function(e) {
        this.querySelector('.text').classList.toggle('open', e.type === 'mouseenter');
    };

    var myLink = document.querySelectorAll('.border');
    for (i = 0; i < myLink.length; i++) {
        myLink[i].addEventListener('mouseenter', handle);
        myLink[i].addEventListener('mouseleave', handle);
    }


    
</script>
  </body>



<head>
    <link rel="stylesheet" href="style.css">
    <script src="script.js"></script>
    <style>
      .border {
       border: 2px solid #000000;
        width: 100px;
        height: 100px;
      }
      .border img {
        width: 50px;
        height: 50px;
      }
      .text {
        display:none;
      }
      .border:hover .text {
          display: block;
      }
    </style>
  </head>

  <body>
<div class="border">
  <img src='#'>
  <div class='text'>first</div>
</div>
<div class="border">
  <img src='#'>
  <div class='text'>second</div>
</div>
<div class="border">
  <img src='#'>
  <div class='text'>third</div>
</div>
  </body>
Ответить с цитированием
  #4 (permalink)  
Старый 28.06.2017, 20:05
Аспирант
Отправить личное сообщение для JohnJohn Посмотреть профиль Найти все сообщения от JohnJohn
 
Регистрация: 04.06.2017
Сообщений: 46

Та дело в том, что при клике на text должно открываться модальное окно и если я поведу мышь за область видимости браузера, то модальное окно исчезает(а мне нужно, что бы оно не исчезало), думал, что это может помочь, но увы нет, но вам спасибо за разъяснение.
Ответить с цитированием
  #5 (permalink)  
Старый 28.06.2017, 20:34
Аспирант
Отправить личное сообщение для JohnJohn Посмотреть профиль Найти все сообщения от JohnJohn
 
Регистрация: 04.06.2017
Сообщений: 46

Вот пример:

<head>
    <link rel="stylesheet" href="style.css">
    <script src="script.js"></script>
    <style>
      .border {
       border: 2px solid #000000;
        width: 100px;
        height: 100px;
      }
      .border img {
        width: 50px;
        height: 50px;
      }
      .text {
        display:none;
      }
      .text.open {
        display: block;
      }
      .modal {
        display: none;
        position: fixed;
        width: 100%;
        height: 100%;
        background: rgba(0, 0, 0, 0.55);
        top: 0;
        left: 0;
        z-index: 1001;
      }
      .modal_open .modal {
        display: block;
      }
    
      
    </style>
  </head>

  <body>
<div class="border">
  <img src='#'>
  <div class='text'>first
  <div class='modal'></div>
  </div>
  
</div>
<div class="border">
  <img src='#'>
  <div class='text'>second
  <div class='modal'></div>
  </div>
  
</div>
<div class="border">
  <img src='#'>
  <div class='text'>third
  <div class='modal'></div>
  </div>
  
</div>
<script>


    var handle = function(e) {
        this.querySelector('.text').classList.toggle('open', e.type === 'mouseenter');
    };

    var myLink = document.querySelectorAll('.border');
    for (i = 0; i < myLink.length; i++) {
        myLink[i].addEventListener('mouseenter', handle);
        myLink[i].addEventListener('mouseleave', handle);
    }
  


   var quickView = document.getElementsByClassName('text');

   var qqqq = function () {
            this.classList.toggle('modal_open');

        };
        for (var i = 0; i <  quickView.length; i++) {
            quickView[i].addEventListener('click', qqqq, false);

    }
    
</script>
  </body>

Последний раз редактировалось JohnJohn, 28.06.2017 в 20:40.
Ответить с цитированием
  #6 (permalink)  
Старый 28.06.2017, 22:10
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

JohnJohn, при каком условии тогда должно исчезать окно?
Ответить с цитированием
  #7 (permalink)  
Старый 28.06.2017, 22:18
Аспирант
Отправить личное сообщение для JohnJohn Посмотреть профиль Найти все сообщения от JohnJohn
 
Регистрация: 04.06.2017
Сообщений: 46

при клике на любую область окна
Ответить с цитированием
  #8 (permalink)  
Старый 28.06.2017, 22:27
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

<button id="modal_button">Open modal</button>
<div class="modal"></div>

var handler = function(e) {
	if(e.target !== modalButton && !e.target.matches('.modal, .modal *')) {
		modal.classList.remove('open');
		this.removeEventListener(e.type, handler);
	}
};

var modal = document.querySelector('.modal');
var modalButton = document.getElementById('modal_button');

modalButton.onclick = function() {
	if(!modal.classList.contains('open')) {
		modal.classList.add('open');
		window.addEventListener('click', handler);
	}
};
Ответить с цитированием
  #9 (permalink)  
Старый 28.06.2017, 23:09
Аспирант
Отправить личное сообщение для JohnJohn Посмотреть профиль Найти все сообщения от JohnJohn
 
Регистрация: 04.06.2017
Сообщений: 46

все равно если мышь находится за окном браузера, то модалка исчезает, хотя может, я не так что то сделал

Последний раз редактировалось JohnJohn, 28.06.2017 в 23:13.
Ответить с цитированием
  #10 (permalink)  
Старый 30.06.2017, 01:04
Аспирант
Отправить личное сообщение для JohnJohn Посмотреть профиль Найти все сообщения от JohnJohn
 
Регистрация: 04.06.2017
Сообщений: 46

Спасибо за помощь, разобрался в последнем примере)
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
свойства объекта события Morr123 Элементы интерфейса 3 10.08.2016 06:36
События - focusout и click отменить повторное срабатывание функции egorychmaster Элементы интерфейса 1 25.06.2015 13:35
Обработка события внутри события grifangel Общие вопросы Javascript 6 04.09.2014 12:34
Дебаг js, или как найти обработчик события для тега jimm88 Events/DOM/Window 1 18.04.2012 15:11
Передача параметров в колбэки и дальнейшее их вешанье на события. Gremlin Общие вопросы Javascript 17 13.08.2011 08:54