Чистое затухание JavaScript, а затем загрузка

У меня есть довольно простой фрагмент jQuery, который затемняет элемент, а затем загружает внешнюю страницу PHP через AJAX после нажатия кнопки, и я пытаюсь сделать то же самое с помощью Javascript, поэтому я могу вообще избежать использования jQuery.

jQuery:

$(document).on("click", "#button", function () {
    $("#image").fadeOut(580, function () {
        $("#image-wrapper").load("loader.php");
     });

    return false;
});

Javascript:

document.getElementById("button").addEventListener("click", function () {
    var xhr = new XMLHttpRequest();
    xhr.onload = function () {
        if (xhr.status >= 200 && xhr.status < 300) {
            document.getElementById("image").classList.add("fade--out");
            document.getElementById("image-wrapper").innerHTML = xhr.responseText;
            console.info("Success");
        } else {
            console.info('Error');
        }
    };

    xhr.open('GET', 'loader.php');
    xhr.send();
});

И немного CSS:

.fade--out {
    opacity: 0;
}

#image {
    transition: opacity 480ms ease 0s;
}

До сих пор я писал это, но я могу только заставить XMLHttpRequest работать нормально, но я не могу заставить элемент image исчезать перед загрузкой файла PHP. Как я могу заставить image div исчезать, а затем загружать файл PHP внутри imaga-wrapper div?

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

Taplar 11.12.2020 22:49
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
122
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Смотрите комментарии:

document.addEventListener("click", function (evt) {
  // Because of event delegation, we need to check to see
  // if the source of the event was the button
  if (evt.target.id === "button"){

    // Add a class to the image that changes the opacity to fully
    // transparent, but because of the default image styling, a 
    // CSS transition will do that over the course of 480 milliseconds.
    document.getElementById("image").classList.add("fade--out");
    
    // Once that is done, call the supplied function
    requestAnimationFrame(function(){
       // AJAX Call here
    });
    
  }
});
.fade--out {
    opacity: 0;
}

#image {
    transition: opacity 480ms ease 0s;
}

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