Изменение текста с помощью Fade Javascript несколько раз

Я пытаюсь создать свой собственный веб-сайт, где в центре стоит начальная цитата:
"Добро пожаловать на мой сайт", а при наведении курсора на опции меню котировка должна измениться. Например: если я наведу курсор на О, он может сказать: "Это моя страница" Обо мне ". (Пример явно упрощен).

HTML-фрагмент:

<a href = "#" class = "titleAbout">About</a>
<a href = "#" class = "titleContact">Contact</a>
<a href = "#" class = "titleHome">Home</a>
<div>
<p>
Welcome to my Website!
</p>
</div>

Фрагмент CSS:

.fade { 
  animation: fadein 2s;

}
@keyframes fadein {
  from {
    opacity:1;
  }
  50% {
    opacity: 0;
  }
  to {
    opacity:1;
  }
}

Фрагмент JS

let myP = document.querySelector('p');
let titleWords = document.querySelector('a.titleAbout');

titleWords.addEventListener('mouseenter', function(){
    myP.classList.add("fade");
setTimeout(function(){
        myP.innerHTML = "This is my about Me page";
        }, 1000);
setTimeout(function(){
            text.classList.toggle("fade");
        }, 2000);
    });

titleWords = document.querySelector('a.titleContact');

titleWords.addEventListener('mouseenter', function(){
    myP.classList.add("fade");
setTimeout(function(){
        myP.innerHTML = "This is my Contact page";
        }, 1000);
setTimeout(function(){
            text.classList.toggle("fade");
        }, 2000);
    });

Однако - он правильно затухает только при первом наведении курсора на пункт меню, в других случаях он меняет innerHTML, но не затухает и не появляется.

Почему именно это происходит и как это исправить?

Два основных момента: 1) Приведенный мной пример упрощен, поскольку я еще не решил, какой именно должна быть новая цитата, но мне нужна возможность изменить все предложение. 2) Это по-прежнему не меняет того факта, что затухание происходит только один раз.

Shaul Solomon 19.07.2018 14:15

Я предполагаю, что у вас есть несколько проблем: 1. setTimeouts уродливы: сделайте первый setTimeout с css (более длинная непрозрачность 0), второй тайм-аут должен перейти в onMouseOut, чтобы удалить класс fade 2. если у вас все еще есть проблемы, вместо обновления ваших контейнеров, но удалите их и добавьте заново.

Markus 19.07.2018 14:21

Можете ли вы предоставить демонстрационную ссылку на jsFiddle?

Abhishek Kumar 19.07.2018 14:25
jsfiddle.net/15kocfhr/3
Shaul Solomon 19.07.2018 14:51
Поведение ключевого слова "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
4
83
3

Ответы 3

вы не определили переменную text в своем javascript. Я думаю вы имеете ввиду myP.classList.toggle("fade");

let myP = document.querySelector('p');
let titleWords = document.querySelector('a.titleAbout');

titleWords.addEventListener('mouseenter', function(){
    myP.classList.add("fade");
setTimeout(function(){
        myP.innerHTML = "This is my about Me page";
        }, 1000);
setTimeout(function(){
            myP.classList.toggle("fade");
        }, 2000);
    });

titleWords = document.querySelector('a.titleContact');

titleWords.addEventListener('mouseenter', function(){
    myP.classList.add("fade");
setTimeout(function(){
        myP.innerHTML = "This is my Contact page";
        }, 1000);
setTimeout(function(){
            myP.classList.toggle("fade");
        }, 2000);
    });
.fade { 
  animation: fadein 2s;

}
@keyframes fadein {
  from {
    opacity:1;
  }
  50% {
    opacity: 0;
  }
  to {
    opacity:1;
  }
}
<a href = "#" class = "titleAbout">About</a>
<a href = "#" class = "titleContact">Contact</a>
<a href = "#" class = "titleHome">Home</a>
<div>
<p>
Welcome to my Website!
</p>
</div>

Можно короче и без setTimeout:

let myP = document.querySelector('p');

function show(textToShow){
  myP.innerHTML = textToShow;
  myP.classList.add("fade");
}

function hide(){
 myP.classList.remove("fade");
}
.fade { 
  animation: fadein 3s;

}
@keyframes fadein {
  from {
    opacity:1;
  }
  50% {
    opacity: 0;
  }
  to {
    opacity:1;
  }
}
<a href = "#" class = "titleAbout" onmouseenter = "show('This is my about Me page')" onmouseout = "hide()">About</a>
<a href = "#" class = "titleContact" onmouseenter = "show('This is my contact Me page')" onmouseout = "hide()">Contact</a>
<a href = "#" class = "titleHome">Home</a>
<div>
<p>
Welcome to my Website!
</p>
</div>

что ты имеешь в виду?

לבני מלכה 19.07.2018 14:40

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

const myPContainer = document.getElementById('pContainer');
const titleWords = document.querySelectorAll('a');
let i;

function attachHandlers(i, elem) {
  let timeoutHandle;
  const pElem = document.createElement('p');
  pElem.innerHTML = elem.getAttribute('title');
  myPContainer.appendChild(pElem);

  elem.addEventListener('mouseenter', function(){
    timeoutHandle = null;
    pElem.classList.add("fadein");
  });

  elem.addEventListener('mouseleave', function(){
    // timeoutHandle = setTimeout(() => {
      pElem.classList.remove("fadein");
    // }, 2000);
  });
  
}

for (i = 0; i < titleWords.length; ++i) {
  attachHandlers(i, titleWords[i]);
}
#pContainer {
  position: relative;
  height: 20px;
}
#pContainer p {
  position: absolute;
  display: block;
  opacity: 0;
}
.fadein { 
  animation: fadein 2s;
  display: block;
}
@keyframes fadein {
  from {
    opacity: 0;
  }
  50% {
    opacity: 1;
  }
  to {
    opacity: 0;
  }
}
<a href = "#" class = "titleAbout" title = "This is my about Me page">About</a>
<a href = "#" class = "titleContact" title = "This is my Contact page">Contact</a>
<a href = "#" class = "titleHome" title = "This is my Home page">Home</a>
<div id = "pContainer"></div>

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