2015-11-16 1 views
1

Недавно я не смог выполнить вызов по кодированию, но все равно пытался его заполнить для будущих знаний. Я пытаюсь изменить отдельные буквы текста при нажатии на пользователя с помощью JavaScript/jQuery. Перед этим нужно предпринять несколько шагов. У меня есть все шаги ниже, кроме шага номер 3.Попытка изменить отдельные буквы текста при нажатии на JavaScript

Направления:

1.) зависший курсор на или ниже слово вызывает подчеркивание бар появляться.
2.) При нажатии на слово, когда отображается строка, отображается новый блок со словом в нем.
3.) Цвет каждой буквы изменяется, нажимая на каждую букву. Каждая буква должна измениться до того, как будет выполнен следующий шаг.
4.) Щелчок по выделенному слову подчеркивает слово «оранжевый».
5.) Повторное нажатие на выделенное слово изменит цвет на «красный».
6.) Повторное нажатие на выделенное слово приведет к сбросу слова.

Ниже я реализовал некоторые псевдо-код в index.js файл для того, что я думаю, что было бы логично работать, но я не слишком уверен, как идти о настройке вместе:

HTML:

<div class="word_div"> 
     <p class="default_word_style"><span class="inner_default_word_style">It's</span></p> 
     <p class="default_word_style"><span class="inner_default_word_style">no</span></p> 
     <p class="default_word_style"><span class="inner_default_word_style">use</span></p> 
     <p class="default_word_style"><span class="inner_default_word_style">going</span></p> 
     <p class="default_word_style"><span class="inner_default_word_style">back</span></p> 
     <p class="default_word_style"><span class="inner_default_word_style">to</span></p> 
     <p class="default_word_style"><span class="inner_default_word_style">yesterday</span></p>, 
     <p class="default_word_style"><span class="inner_default_word_style">because</span></p> 
     <p class="default_word_style"><span class="inner_default_word_style">I</span></p> 
     <p class="default_word_style"><span class="inner_default_word_style">was</span></p> 
     <p class="default_word_style"><span class="inner_default_word_style">a</span></p> 
     <p class="default_word_style"><span class="inner_default_word_style">different</span></p> 
     <p class="default_word_style"><span class="inner_default_word_style">person</span></p> 
     <p class="default_word_style"><span class="inner_default_word_style">then</span></p>. 
    </div> 
    </div> 
</div> 

CSS:

.default_word_style { 
    padding-bottom: 1em; 
    display: inline; 
} 

.default_word_style:hover { 
    text-decoration: underline; 
    color: orange; 
} 

.inner_default_word_style { 
    color: black; 
} 

.inner_default_word_style:hover { 
color: black; 
} 

.blue { 
    color: blue; 
    background-color: purple; 
} 

.bold_orange { 
    color: orange; 
} 

.red { 
    color: red; 
} 

.purple { 
    color: purple; 
} 

.added_word { 
    background-color: orange; 
    color: white; 
    width: 10%; 
    text-align: center; 
} 

.display_none { 
    display: none; 
} 

JavaScript

$(function(){ 
    counter = 0; 
    var word = ''; 
    $('.inner_default_word_style').click(function(){ 
    counter += 1; 
    if (counter == 1){ 
     word = $(event.target).html(); 
     $(event.target).append('<div class="added_word">' + word + '</div>'); 
     } else if (counter == 2){ 

     // 1.) When a letter is clicked, change its 'color' to 'purple'. 

     // 2.) Check the string in which the letter is in to see if all the 
     //  letters of that string have been clicked on. 

     // 3.) IF all the letters in that string HAVE been clicked, 'counter += 1' 
     //  so that the next click has a 'counter' = '3'. 

     //  ELSE 

     // 4.) IF all the letters have NOT been clicked on, 'counter -= 1' 
     //  so that the next click has a 'counter' = '2' again. Repeat steps 1-3. 


     } else if (counter == 3){ 
     $(".added_word").remove(); 
     $(event.target).addClass('bold_orange'); 
     }else if (counter == 4){ 
     $(event.target).addClass('red'); 
     } else if (counter == 5){ 
     $(event.target).removeClass('red bold_orange'); 
     counter = 0; 
    } 
    console.log(counter); 
    }); 
}); 

Кроме того, мне нужно поставить метки вокруг каждого отдельного письма предназначаться это письмо при нажатии?

+0

Можете ли вы поместить свой код в jsfiddle? –

+0

Письмо или слово? –

+0

Для начала вам понадобится один счетчик на каждое слово. –

ответ

1

Вот мой путь. Я разделил слова на промежутки, а затем связал их с событием click.

В настоящее время это шаги 1 и 3,4,5,6.

Я не понимаю, не шаг 2.

$(function() { 
 
    $('#tar > p').each(function(index, word) { 
 
    word = $(word); 
 

 
    var originalText = word.text(); 
 
    var newText = ""; 
 

 
    for (var i = 0; i < originalText.length; i++) { 
 
     newText += '<span>' + originalText[i] + '</span>'; 
 
    } 
 

 
    word.html(newText); 
 

 
    word.hover(function() { 
 
     word.addClass('underline'); 
 
    }, function() { 
 
     word.removeClass('underline'); 
 
    }); 
 

 
    word.find('span').each(function(index, letter) { 
 
     letter = $(letter); 
 

 
     letter.click(function(e) { 
 
     if (word.hasClass('wordstage2') || word.hasClass('wordstage1')) return; 
 
     letter.addClass('colorText'); 
 
     }); 
 
    }); 
 

 
    word.click(function() { 
 
     if (word.hasClass('wordstage2')) { 
 
     word.removeClass('wordstage2'); 
 
     } else if (word.hasClass('wordstage1')) { 
 
     word.removeClass('wordstage1'); 
 
     word.addClass('wordstage2'); 
 
     } else if (word.children().length == word.children(".colorText").length) { 
 
     word.find('span').each(function(index, letter) { 
 
      letter = $(letter); 
 
      letter.removeClass('colorText'); 
 
     }); 
 

 
     word.addClass('wordstage1'); 
 
     } 
 

 
    }) 
 
    }); 
 
});
.underline { 
 
    text-decoration: underline; 
 
} 
 
.colorText { 
 
    color: blue; 
 
} 
 
.wordstage1 { 
 
    color: orange; 
 
} 
 
.wordstage2 { 
 
    color: red; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
 

 
<div id="tar"> 
 
    <p>It's<p/> 
 
    <p>no<p/> 
 
    <p>use<p/> 
 
    <p>going<p/> 
 
    <p>back<p/> 
 
    <p>to<p/> 
 
    <p>yesterday<p/>, 
 
    <p>because<p/> 
 
    <p>I<p/> 
 
    <p>was<p/> 
 
    <p>a<p/> 
 
    <p>different<p/> 
 
    <p>person<p/> 
 
    <p>then<p/>. 
 
</div>

+0

Это не сработало. Это дало мне следующий результат для шага номер 3, используя логику, которая сначала должна быть рассмотрена: «Это бесполезно, чтобы вернуться к вчера, потому что тогда я был другим человеком». – Ctpelnar1988

+0

@ Ctpelnar1988 Боюсь, я не понимаю, что вы говорите. : S Что касается вашего комментария, что такое «Это»? – Spaceman

+0

Я изменил его из мира привет в ваш оригинальный текст, если это то, что вы имеете в виду :)? – Spaceman

0

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

$(function(){ 
 
    counter = 0; 
 
    var Elementcounter = {}; // to handle counter for each element 
 
    var word = ''; 
 
    $('.inner_default_word_style').click(function(event){ 
 
    
 
     if(!isNaN(Elementcounter[event.target.id])){ 
 
      Elementcounter[event.target.id] += 1; 
 
    }else{ 
 
      Elementcounter[event.target.id] = 1; 
 
    } 
 
    counter = Elementcounter[event.target.id] 
 

 
    if (counter == 1){ 
 
     word = $(event.target).html(); 
 
     $(event.target).append('<div class="added_word">' + word + '</div>'); 
 
     } else if (counter == 2){ 
 

 
     // 1.) When a letter is clicked, change its 'color' to 'purple'. 
 

 
     // 2.) Check the string in which the letter is in to see if all the 
 
     //  letters of that string have been clicked on. 
 

 
     // 3.) IF all the letters in that string HAVE been clicked, 'counter += 1' 
 
     //  so that the next click has a 'counter' = '3'. 
 

 
     //  ELSE 
 

 
     // 4.) IF all the letters have NOT been clicked on, 'counter -= 1' 
 
     //  so that the next click has a 'counter' = '2' again. Repeat steps 1-3. 
 

 

 
     } else if (counter == 3){ 
 
     $(".added_word").remove(); 
 
     $(event.target).addClass('bold_orange'); 
 
     }else if (counter == 4){ 
 
     $(event.target).addClass('red'); 
 
     } else if (counter == 5){ 
 
     $(event.target).removeClass('red bold_orange purple'); 
 
     counter = 0; 
 
    } 
 
    console.log(counter); 
 
    }); 
 
     });
.default_word_style { 
 
    padding-bottom: 1em; 
 
    display: inline; 
 
} 
 

 
.default_word_style:hover { 
 
    text-decoration: underline; 
 
    color: orange; 
 
} 
 

 
.inner_default_word_style { 
 
    color: black; 
 
} 
 

 
.inner_default_word_style:hover { 
 
color: black; 
 
} 
 

 
.blue { 
 
    color: blue; 
 
    background-color: purple; 
 
} 
 

 
.bold_orange { 
 
    color: orange; 
 
} 
 

 
.red { 
 
    color: red; 
 
} 
 

 
.purple { 
 
    color: purple; 
 
} 
 

 
.added_word { 
 
    background-color: orange; 
 
    color: white; 
 
    width: 10%; 
 
    text-align: center; 
 
} 
 

 
.display_none { 
 
    display: none; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> 
 
<div class="word_div"> 
 
     <p class="default_word_style"><span class="inner_default_word_style" id="e1">It's</span></p> 
 
     <p class="default_word_style"><span class="inner_default_word_style" id="e2" >no</span></p> 
 
     <p class="default_word_style"><span class="inner_default_word_style" id="e3" >use</span></p> 
 
     <p class="default_word_style"><span class="inner_default_word_style" id="e4" >going</span></p> 
 
     <p class="default_word_style"><span class="inner_default_word_style" id="e5" >back</span></p> 
 
     <p class="default_word_style"><span class="inner_default_word_style" id="e6" >to</span></p> 
 
     <p class="default_word_style"><span class="inner_default_word_style" id="e7" >yesterday</span></p>, 
 
     <p class="default_word_style"><span class="inner_default_word_style" id="e8" >because</span></p> 
 
     <p class="default_word_style"><span class="inner_default_word_style" id="e9">I</span></p> 
 
     <p class="default_word_style"><span class="inner_default_word_style" id="e10">was</span></p> 
 
     <p class="default_word_style"><span class="inner_default_word_style" id="e11" >a</span></p> 
 
     <p class="default_word_style"><span class="inner_default_word_style" id="e12" >different</span></p> 
 
     <p class="default_word_style"><span class="inner_default_word_style" id="e13" >person</span></p> 
 
     <p class="default_word_style"><span class="inner_default_word_style" id="e14" >then</span></p>. 
 
    </div> 
 
    </div> 
 
</div>

0

Попробуйте это, с тем преимуществом, что циклический possibile изменение цвета определены в массиве, которые могут быть добавлены к.

var wordColors = ['black', 'bold_orange', 'red']; 
var clss = { 'highlight':'purple' , 'dummy':'dummy' }; 

// Wrap all words in `<span class="word">....</span>` 
var str = $('.word_div').text().split(/\s/).map(function(word) { 
    return '<span class="word ' + wordColors[0] + '">' + word + '</span>'; 
}); 
$('.word_div').html(str.join(' ')); 

$('span.word').each(function(i, word) { 
    // Wrap all letters in `<span class="letter">.</span>` 
    var $word = $(word); 
    var letters = $word.text().split(''); 
    str = letters.map(function(letter) { 
     return '<span class="letter">' + letter + '</span>'; 
    }); 
    $word.html(str.join('')); 
    str.length = 0; 
}).on('click', function() { 
    $word = $(this); 
    $("#currentWord").text($word.text()); 
    var $letters = $word.find("span.letter"); 
    if($letters.not('.'+clss.highlight).not('.'+clss.dummy).length === 0) { 
     $letters.off('click').removeClass(clss.highlight).addClass(clss.dummy); 
     $.each(wordColors, function(i, color) { 
      if($word.hasClass(color)) { 
       var colorIndex = (i + 1) % wordColors.length; 
       $word.removeClass(color).addClass(wordColors[colorIndex]); 
       if(colorIndex === 0) { 
        $letters.removeClass(clss.dummy).on('click', letterClick); // reset 
       } 
       return false; // break 
      } 
     }); 
    } 
}); 
function letterClick() { 
    $(this).addClass(clss.highlight); 
} 
$('span.letter').on('click', letterClick); 

https://jsfiddle.net/46vds67p/2/

Попробуйте добавить, скажем, 'зеленый' в wordColors, и соответствующая директива CSS.

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