Анимация в каждой карточке страницы архива блога каменщика

У меня есть архив блога каменщика здесь: http://staging.morningsidepharm.com/news-blog/

Он находится в Wordpress и использовал плагин для создания страниц под названием Elementor.

Я пытался найти способы исчезнуть в каждой «карточке» одну за другой. Посты выглядят так:

<div class = "elementor-posts-container">
 <article class = "elementor-post"></article>
 <article class = "elementor-post"></article>
 <article class = "elementor-post"></article>
 <article class = "elementor-post"></article>
</div>

Поэтому я поставил файл .js в свою установку Wordpress, а внутри файла с именем additional.js добавил следующий код:

$(".elementor-post").each(function(i) {
    $(this).delay(100 * i).fadeIn(500);
});

Я тоже пробовал это:

function fadeLI(elem, idx) {
    elem.eq(idx).fadeIn(500, function() {
        fadeLI(elem, (idx + 1) % elem.length);
    });
}

fadeLI($(".elementor-post"), 0);

Я считаю, что мне нужно заменить $ в первом примере на jQuery, поэтому я тоже попробовал.

Я добавил следующий CSS для div:

.elementor-post { 
  display: none; 
}

Единственное, что все это, кажется, делает, это display:none;, блоки elementor-post.

Будучи Wordpress, я действительно предполагал, что jQuery активен, я видел его в списке ресурсов в моем браузере ... поэтому я не совсем уверен, где я ошибаюсь.

Любая помощь будет принята с благодарностью.

Поведение ключевого слова "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
0
82
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

В WordPress jQuery использует без конфликтного режима. Это означает, что вам нужно всегда использовать jQuery вместо $.

Если я попробую это с вашим первым примером, это сработает:

jQuery(".elementor-post").each(function(i) {
    jQuery(this).delay(100 * i).fadeIn(500);
});

Но в моих тестах мне нужно было отключить все сообщения с помощью селектора css .elementor-posts .elementor-post.

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

wp_enqueue_script('additional-js', get_template_directory_uri() . '/additional.js', array( 'jquery' ), false, true);

Или вы можете обернуть функцию внутри функции jQuery(document).ready(). Это имеет то преимущество, что вы можете передать jQuery как $ всему, что находится внутри этой функции:

jQuery(document).ready(function($){
    // you can use $ here

    $(".elementor-post").each(function(i) {
        $(this).delay(100 * i).fadeIn(500);
    });

});

Огромное спасибо! Могу я спросить, какие тесты вы делали и как вы их проходили? Поскольку я не могу заставить его работать. Теперь я поставил в очередь файл additional.js в нижнем колонтитуле, как было предложено, он все еще проходит, кажется, что это хорошо - я пробовал оба варианта кода js, но ничего не происходит, я также пробовал display: none ; для .elementor-posts и .elementor-post просто сами по себе ничего не происходит, добавляя! important, они просто полностью исчезают ... Есть идеи, что я делаю не так? Еще раз спасибо! :)

Shaun Taylor 03.09.2018 12:52

Я просто попробовал немного в консоли разработчика Chrome на вашем веб-сайте. Если я посмотрю на ваш сайт, все сообщения будут видны при загрузке страницы. Если я вас правильно понял, вы хотите скрыть все сообщения при загрузке страницы, а затем скрыть их. Поэтому сначала снова скройте все сообщения: .elementor-posts .elementor-post { display: none; }

cgdannie 03.09.2018 13:07

Хорошо, теперь я вижу вашу проблему: правило отменяется стилем кладки. Добавление !important не сработает, потому что это также переопределит эффект затухания. Вам нужно сделать селектор более конкретным. Вы можете добавить собственный класс в Elementor к виджету публикации, например 'исчезающий-пост-контейнер'. Тогда используйте .fade-in-post-container .elementor-posts .elementor-post { display: none; }

cgdannie 03.09.2018 13:17

Хорошо, теперь это работает отлично - большое спасибо за помощь, а также за объяснение, я полностью понимаю проблемы, с которыми я столкнулся сейчас :)

Shaun Taylor 03.09.2018 13:49

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