在悬停时打开Bootstrap下拉菜单

时间:2018-07-19 20:04:31

标签: javascript twitter-bootstrap-3 dropdown

因此,我在使用Bootstrap 3.0的网站中进行了一些更改,在它们的导航栏中,它具有超大下拉菜单,我需要将其从单击显示更改为悬停显示。

所以我需要代码以这种方式工作:

用户将光标放在nav区域上,dropdown出现时没有任何点击。

这是BS3下拉代码:

+function($) {
  "use strict";

  // DROPDOWN CLASS DEFINITION
  // =========================

  var backdrop = '.dropdown-backdrop'
  var toggle = '[data-toggle=dropdown]'
  var Dropdown = function(element) {
    var $el = $(element).on('click.bs.dropdown', this.toggle)
  }

  Dropdown.prototype.toggle = function(e) {
    var $this = $(this)
    if ($this.is('.disabled, :disabled')) return

    var $parent = getParent($this)
    var isActive = $parent.hasClass('open')

    clearMenus()

    if (!isActive) {
      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
        // if mobile we we use a backdrop because click events don't delegate
        $('<div class="dropdown-backdrop"/>').insertAfter($(this)).on('click', clearMenus)
      }

      $parent.trigger(e = $.Event('show.bs.dropdown'))

      if (e.isDefaultPrevented()) return

      $parent
        .toggleClass('open')
        .trigger('shown.bs.dropdown')

      $this.focus()
    }
    return false
  }

  Dropdown.prototype.keydown = function(e) {
    if (!/(38|40|27)/.test(e.keyCode)) return

    var $this = $(this)

    e.preventDefault()
    e.stopPropagation()

    if ($this.is('.disabled, :disabled')) return

    var $parent = getParent($this)
    var isActive = $parent.hasClass('open')

    if (!isActive || (isActive && e.keyCode == 27)) {
      if (e.which == 27) $parent.find(toggle).focus()
      return $this.click()
    }

    var $items = $('[role=menu] li:not(.divider):visible a', $parent)

    if (!$items.length) return

    var index = $items.index($items.filter(':focus'))

    if (e.keyCode == 38 && index > 0) index-- // up
      if (e.keyCode == 40 && index < $items.length - 1) index++ // down
        if (!~index) index = 0

    $items.eq(index).focus()
  }

  function clearMenus() {
    $(backdrop).remove()
    $(toggle).each(function(e) {
      var $parent = getParent($(this))
      if (!$parent.hasClass('open')) return
      $parent.trigger(e = $.Event('hide.bs.dropdown'))
      if (e.isDefaultPrevented()) return
      $parent.removeClass('open').trigger('hidden.bs.dropdown')
    })
  }

  function getParent($this) {
    var selector = $this.attr('data-target')

    if (!selector) {
      selector = $this.attr('href')
      selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
    }
    var $parent = selector && $(selector)

    return $parent && $parent.length ? $parent : $this.parent()
  }

我想知道是否可以更改此设置:

var Dropdown = function (element) {
  var $el = $(element).on('click.bs.dropdown', this.toggle)
}

变成这样:

var Dropdown = function (element) {
  var $el = $(element).on('hover.bs.dropdown', this.toggle)
}

0 个答案:

没有答案