Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   События mouseover/out (https://javascript.ru/forum/misc/69501-sobytiya-mouseover-out.html)

JohnJohn 28.06.2017 19:49

События 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>

ruslan_mart 28.06.2017 19:53

JohnJohn, использовать события mouseenter/mouseleave вместо mouseover/mouseout. А вообще это проще сделать через CSS.

ruslan_mart 28.06.2017 19:56

<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>

JohnJohn 28.06.2017 20:05

Та дело в том, что при клике на text должно открываться модальное окно и если я поведу мышь за область видимости браузера, то модальное окно исчезает(а мне нужно, что бы оно не исчезало), думал, что это может помочь, но увы нет, но вам спасибо за разъяснение.

JohnJohn 28.06.2017 20:34

Вот пример:

<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>

ruslan_mart 28.06.2017 22:10

JohnJohn, при каком условии тогда должно исчезать окно?

JohnJohn 28.06.2017 22:18

при клике на любую область окна

ruslan_mart 28.06.2017 22:27

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

JohnJohn 28.06.2017 23:09

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

JohnJohn 30.06.2017 01:04

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


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