Как добавить removeEventListener в window.matchMedia?

Вот моя проблема:

Я хочу иметь метод щелчка «addEventListener» только для размера браузера меньше «400 пикселей». Но когда мы изменяем размер браузера, я хочу удалить этот метод.

Формат моего кода ниже. Если я увеличу размер браузера более чем на 400 пикселей, у меня останется этот метод. Мне нужна твоя помощь.

function customFunction(x) {

    var cardClick = document.getElementsByClassName("card");
    var inner = document.getElementsByClassName("card-inner");

    if (x.matches) {

        cardClick[0].addEventListener("click", cardFunction);

        function cardFunction() {
            // some code
            // inner[0].style......
        }

    } else {

        cardClick[0].removeEventListener("click", cardFunction);

    }
}

var x = window.matchMedia("(max-width: 400px)");
customFunction(x);
x.addListener(customFunction);

А где ваш ресайз eventListener?

EugenSunic 18.12.2020 17:42

Я не думаю, что я полностью понимаю, поэтому я просто прокомментирую. if (screen.width < 400) { what.addEventListener ("resize", cb(){}) } else { what.removeEventListener ("resize", cb(){alert("listerner удален"})

ptts 18.12.2020 17:57

Он использует более умный метод, чем старое изменение размера.....MDM. console.info(x, x.matches), чтобы увидеть, что происходит.

Robert 18.12.2020 17:58

MatchMedia работает. Например, если я начну с размера браузера 1200 пикселей, а затем изменю размер до 300 пикселей, «щелчок» сработает после изменения размера.

Bbabis 18.12.2020 18:05

"console.info(x, x.matches)" соответствует: true AND false, работает... Но removeEventListener не работает

Bbabis 18.12.2020 18:05

Да. Я также проверяю это с помощью console.info(cardClick[0]);

Bbabis 18.12.2020 18:14

"console.info(x, x.matches)" : MediaQueryList, а после изменения размера всегда MediaQueryListEvent

Bbabis 18.12.2020 18:20
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Раскрытие чувствительных данных
Раскрытие чувствительных данных
Все внешние компоненты, рассмотренные здесь до сих пор, взаимодействуют с клиентской стороной. Однако, если они подвергаются атаке, они не...
Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Руководство ChatGPT по продаже мини JS-файлов
Руководство ChatGPT по продаже мини JS-файлов
JS-файл - это файл, содержащий код JavaScript. JavaScript - это язык программирования, который в основном используется для добавления интерактивности...
2
7
1 055
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

«Вызов removeEventListener() с аргументами, которые не идентифицируют какой-либо в настоящее время зарегистрированный EventListener в EventTarget, не имеет никакого эффекта».

Вы определяете новую версию функции карты каждый раз, когда вызываете customFunctions, поэтому вы не можете отсоединить ее от элемента, потому что это не та функция, которую вы присоединяете.

function cardFunction() {
   // some code
   // inner[0].style......
}

function customFunction(x) {

    var cardClick = document.getElementsByClassName("card");
    var inner = document.getElementsByClassName("card-inner");

    if (x.matches) {
        cardClick[0].addEventListener("click", cardFunction);

    } else {
        cardClick[0].removeEventListener("click", cardFunction);
    }
}

var x = window.matchMedia("(max-width: 400px)");
customFunction(x);
x.addListener(customFunction);
javascript

Кроме того, нам нужно вывести cardClick и inner из функции, и это работает. Спасибо!!

Bbabis 18.12.2020 18:34
x.removeListener(customFunction)

Посмотрите пример здесь: https://developer.mozilla.org/en-US/docs/Web/API/MediaQueryList/removeListener

Добро пожаловать в Stack Overflow! Пожалуйста, прочитайте Как ответить и отредактируйте пост соответствующим образом. Предоставление фрагмента кода в качестве решения — это хорошо, как и ссылка на ссылку. Однако лучше было бы перефразировать суть справочной ссылки здесь, чтобы ответ был хорошо объяснен без ссылки.

Adriaan 03.02.2023 14:10

Другие вопросы по теме