Disabling jQuery hover effect for menu below 1025px using matchMedia

34 views Asked by At

I run a WordPress site with a custom header. Therefore, I decided to rely on jQuery.

I have a menu (#sitenavigation) that appears when I hover over a container it's in (#menuhover). I only want this to work in viewports that are 1025px and wider using matchMedia. In viewports smaller than that, the buttons that appear (#close-navgation-mobile and #open-navigation-mobile) successfully open and close this menu.

The problem I'm having is successfully disabling the mouseenter/mouseleave functions in viewports smaller than 1025px. How can I edit this code to accomplish this?

$(document).ready(function () {
  if (window.matchMedia("(min-width: 1025px)").matches) {
    $("#menuhover").mouseenter(function () {
      $("#site-navigation").stop(true, false);
      $("#site-navigation").animate({ left: "-2rem", opacity: "1" }, 300);
    });
    $("#menuhover").mouseleave(function () {
      $("#site-navigation").stop(true, false);
      $("#site-navigation").css({ left: "-480px", opacity: "0" });
    });
  } else {
    $("#menuhover").mouseenter(function (event) {
      event.preventDefault();
    });
    $("#menuhover").mouseleave(function (event) {
      event.preventDefault();
    });
  }

  $("#open-navigation-mobile").on("click", function () {
    $("#site-navigation").animate({ left: "-1rem", opacity: "1" }, 250);
    $("#close-navigation-mobile").css({ display: "flex" });
    $("#open-navigation-mobile").css({ display: "none" });
  });
  $("#close-navigation-mobile").on("click", function () {
    $("#site-navigation").animate({ left: "-100vw", opacity: "0" }, 250);
    $("#close-navigation-mobile").css({ display: "none" });
    $("#open-navigation-mobile").css({ display: "flex" });
  });
  $(window).on("beforeunload", function () {
    $("#site-navigation").animate({ left: "-100vw", opacity: "0" }, 250);
    $("#close-navigation-mobile").css({ display: "none" });
    $("#open-navigation-mobile").css({ display: "flex" });
  });
});

I tried the event.preventDefault(); method to not fire the mouseleave/mouseenter functions in viewports smaller than 1025px, expecting nothing to happen when my mouse hovered over #menuhover. Unfortunately, it activated the #sitenavigation menu.

1

There are 1 answers

1
Sandro On BEST ANSWER

Does it work for you?

     if (window.matchMedia("(min-width: 1025px)").matches) {
        $("#menuhover").mouseenter(function () {
          $("#site-navigation").stop(true, false);
          $("#site-navigation").animate({ left: "-2rem", opacity: "1" }, 300);
        }).mouseleave(function () {
          $("#site-navigation").stop(true, false);
          $("#site-navigation").css({ left: "-480px", opacity: "0" });
        });
      } else {
        $("#menuhover").on('mouseenter mouseleave', function() {
            return false
         });
      }