Какой самый простой js-код мне понадобился бы для расширения блока отображения при наведении, чтобы он оставался там на секунду

#javascript #css #timeout #navigation #hover

#javascript #css #тайм-аут #навигация #наведите

Вопрос:

Какой самый простой javascript код, который мне понадобился бы для расширения блока отображения при наведении курсора, чтобы он оставался там в течение секунды, прежде чем вернуться обратно в состояние display none, чтобы пользователь мог щелкнуть расширенную навигацию, где значение display none по умолчанию в css и при наведении курсора отображается блок

Мне нужен только расширенный тайм-аут, просто какой-нибудь простой код

(У меня есть рабочее решение только в css — вместо использования display none я использовал максимальный размер 1 пиксель и нулевую альфа-версию, чтобы он никогда не исчезал, но все равно хотелось бы знать код javascript)

Также есть ли в css какой-либо способ, при наведении курсора на который блок отображения будет полностью отличаться от того, на который вы наводите курсор?

Ответ №1:

Предположительно, вы используете события наведения курсора мыши и mouseout для отображения и скрытия блока отображения, поэтому используйте тайм-аут, чтобы скрыть блок. Если событие наведения курсора мыши происходит до истечения тайм-аута, отмените его. Вот очень простой пример:

 <html>
<head>
  <title>Lingering block</title>

  <style type="text/css">
  #foo, #bar {
    width: 50px;
    height: 50px;
    background-color: green;
  }
  #bar {
    background-color: red;
  }
  </style>

  <script type="text/javascript">

  var uX = (function() {
    var timer;

    function showBar() {
      if (timer) {
        clearTimeout(timer);
        timer = null;
      }
      document.getElementById('bar').style.display = '';
    }

    function hideBar() {
      timer = setTimeout(function () {
        document.getElementById('bar').style.display = 'none';
      },1000);
    }

    return {
      init: function() {
        var bar = document.getElementById('bar');
        var foo = document.getElementById('foo');
        foo.onmouseover = showBar;
        foo.onmouseout = hideBar;
        bar.onmouseover = showBar;
        bar.onmouseout = hideBar;
        bar.style.display = 'none';
        foo = null;
        bar = null;
      }
    };
  }());

  window.onload = uX.init;

  </script>
  </head>
  <body>
    <div id="foo"></div>
    <div id="bar"></div>
  </body>
</html>
  

Рабочая версия должна использовать делегирование событий, а не жестко запрограммированные вещи, вышесказанное — просто демонстрация стратегии.

Комментарии:

1. выглядит неплохо, как мне использовать и javascript, и css, если бы, допустим, #bar был <ul> <li> /> вложен в #foo и #foo: при наведении курсора li отображался бы блок для отображения списка, а обычный #foo li не отображал бы ничего

2. Если пользовательский интерфейс является потомком foo, то переводите прослушиватели в foo только при наведении курсора мыши / выходе будет всплывать. Рассмотрите возможность добавления / удаления классов вместо прямой настройки отображения.

Ответ №2:

Мне кажется, что вы почти ответили сами. Если у вас уже есть «решение» в CSS, просто используйте Javascript, чтобы вернуть эту настройку.

Что-то вроде:

onMouseOver = setInterval(«this.style.opacity = 0», 1000);

Этот (непроверенный псевдокод) установит непрозрачность в 0 через секунду (1000 мс).

Очевидно, что вы могли бы стать сложнее — вы, вероятно, захотите сбросить CSS обратно к нормальному onMouseOut. Но в принципе, просто измените CSS, который вы нашли, динамически, используя script.

Конечно, я мог что-то упустить.

Комментарии:

1. Вероятно, вы захотите использовать setTimeout вместо setInterval

2. Абсолютно … мозговой пердеж с моей стороны. Затем вы можете установить другой тайм-аут — запуск через несколько мс после этого — для возврата свойства к исходному значению.

Ответ №3:

Я думаю, вам следует взглянуть на JQUERY UI. Я думаю, это послужит вашей цели, и вы также могли бы заглянуть в скрипт Jquery ui, чтобы узнать, что происходит внутри javascript….