2015-04-26 4 views
0

Есть ли более простой способ переключить 2 или более видимость текста? Когда я использовал метод .toggle(), текст вскакивает вверх и вниз, потому что они одновременно переключаются. С .fadeIn() и .fadeOut() он работает правильно, но код грязный.Переключить текст на JavaScript

var triggerTitle = function() { 
 
    var hasClassHide = $(".hero-title.1").hasClass("hide"); 
 

 
    if (hasClassHide) { 
 
    $(".hero-title.1").removeClass("hide"); 
 
    $(".hero-title.1").fadeIn(1000); 
 
    $(".hero-title.2").addClass("hide"); 
 
    $(".hero-title.2").fadeOut(1000); 
 
    $(".hero-title.2").css("display", "none"); 
 
    } else { 
 
    $(".hero-title.2").removeClass("hide"); 
 
    $(".hero-title.2").fadeIn(1000); 
 
    $(".hero-title.1").addClass("hide"); 
 
    $(".hero-title.1").fadeOut(1000); 
 
    $(".hero-title.1").css("display", "none"); 
 
    } 
 
}; 
 

 
setInterval(triggerTitle, 3000);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<h1 class="hero-title 1">WEB DEVELOPER</h1> 
 
<h1 class="hero-title 2 hide" style="display: none;">WEB DESIGNER</h1>

+0

Если вы поместили код в фрагмент, его можно попробовать прямо на этой странице :) – ByteHamster

+0

Я не понимаю, что вы хотите, но для 'fadeIn' и' fadeout' вам не нужно устанавливать также ' css ("display", "none") '. –

+1

попробуйте вот так: 'if (hasClassHide) { $ (". Hero-title.1 "). RemoveClass (" hide "); $ (". Hero-title.2"). FadeOut (1000); $ (". Hero-title.1"). FadeIn (1000); $ (". Hero-title.2"). AddClass ("hide"); } else { $ (". Hero-title.2"). RemoveClass ("hide"); $ (". Hero-title.1"). FadeOut (1000); $ (". Hero-title.2"). FadeIn (1000); $ (". Hero-title.1"). AddClass ("hide"); } ' –

ответ

3

Попробуйте этот подход:

$('h1').hide(); 
 

 
var titles = ['web developer', 'web designer']; 
 
var index = -1; 
 
var triggerTitle = function() { 
 
    $('h1').fadeOut(); 
 
    setTimeout(function() { 
 
    $('h1').text(titles[index].toUpperCase()); 
 
    $('h1').fadeIn(); 
 
    }, 1000); 
 
    index = (index < titles.length - 1) ? index + 1 : 0; 
 
    console.log(index); 
 
}; 
 

 
setInterval(triggerTitle, 3000);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<h1></h1>

Таким образом, вы храните ваши сообщения в единый массив, и вы можете добавить столько названий, как вы хотите , И у вас есть только один тег <h1> в вашем HTML. Код становится намного более чистым.

Надеюсь, это поможет!

+0

Спасибо, Андрей, но теперь на загрузке страницы заголовок пуст. Есть ли способ исправить это? – Gabriel

0

на основе комментария @A.J., я добавил немного CSS. Сейчас выглядит очень мило.

var triggerTitle = function() { 
 
    var hasClassHide = $(".hero-title.1").hasClass("hide"); 
 

 
    if (hasClassHide) { 
 
    $(".hero-title.1").removeClass("hide"); 
 
    $(".hero-title.2").fadeOut(1000); 
 
    $(".hero-title.1").fadeIn(1000); 
 
    $(".hero-title.2").addClass("hide"); 
 
    } else { 
 
    $(".hero-title.2").removeClass("hide"); 
 
    $(".hero-title.1").fadeOut(1000); 
 
    $(".hero-title.2").fadeIn(1000); 
 
    $(".hero-title.1").addClass("hide"); } 
 
}; 
 

 
setInterval(triggerTitle, 3000);
h1 { 
 
    position: absolute; 
 
    width: 80%; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<h1 class="hero-title 1">WEB DEVELOPER</h1> 
 
<h1 class="hero-title 2 hide" style="display: none;">WEB DESIGNER</h1>

Смежные вопросы