Первый пост здесь. Надеюсь, вы поможете мне с моей проблемой:
Я пишу игру, в которой пользователю нужно угадать слово из перемешанных букв, нажимая на каждую букву, чтобы вставить ее в первое пустое место «правильного» поля.
Теперь, когда буква нажата, она должна перемещаться на новое место в анимированном виде. Поскольку я использую диапазон для создания отдельного поля для каждой буквы, я не мог понять, как заставить этот диапазон перемещаться в новое место анимированным образом с помощью CCS3 / JavaScript / JQuery.
Код находится в JSFiddle здесь: http://jsfiddle.net/Pfsqu/
JS:
var randomNumber = Math.floor(Math.random() * words.length);
var word = words[randomNumber];
var chars = word.split('');
chars=_.shuffle(chars);
for (var i in chars) {
$('#shuffled').append('<span>'+chars[i]+'</span>');
$('#correct').append('<span>');
}
$('#shuffled > span').click(function() {
var letter = $(this);
letter.replaceWith('<span>');
$('#correct > span:empty').first().append( letter ); /* this part needs to be animated*/
CSS:
p > span{
background-color: white;
margin: 10px;
-webkit-border-radius: 15px;
border-radius: 15px;
width: 2.5em;
height: 2.5em;
display: inline-block;
text-align: center;
line-height: 2.5em;
vertical-align: middle;
animation: 1000ms move ease-in-out;
-webkit-animation: 1000ms move ease-in-out;
}
1 ответ
Я думаю, что довольно сложно анимировать предметы так, как вы задумали.
Я бы решил эту проблему, сохранив тот же элемент DOM и изменив его свойства.
Например, см. Это
демо
HTML - это
<div class="solution">
<span class="q q4">W</span>
<span class="q q2">O</span>
<span class="q q3">R</span>
<span class="q q1">D</span>
</div>
Я установил буквы WORD по порядку, а затем я установил для них один из классов от q1 до q4. Этот класс установит диапазон в определенное положение на экране.
Это достигается в этом CSS (а также в позиции для статуса «решено»
.solution {
margin-top: 100px;
-webkit-transition: all 5s;
position: relative;
}
.solution span {
border: solid 1px green;
padding: 10px;
margin-top: 80px;
-webkit-transition: all 2s;
position: absolute;
background-color: lightgreen;
font-size: 30px;
}
.solution span:nth-child(1) {
-webkit-transform: translate(0px, 0px) rotate(0deg);
}
.solution span:nth-child(2) {
-webkit-transform: translate(80px, 0px) rotate(0deg);
}
.solution span:nth-child(3) {
-webkit-transform: translate(160px, 0px) rotate(0deg);
}
.solution span:nth-child(4) {
-webkit-transform: translate(240px, 0px) rotate(0deg);
}
div.solution span.q {
background-color: yellow !important;
border: solid 1px red;
border-radius: 50%;
}
.solution .q.q1 {
-webkit-transform: translate(0px, -100px) rotate(360deg);
}
.solution .q.q2 {
-webkit-transform: translate(80px, -100px) rotate(360deg);
}
.solution .q.q3 {
-webkit-transform: translate(160px, -100px) rotate(360deg);
}
.solution .q.q4 {
-webkit-transform: translate(240px, -100px) rotate(360deg);
}
Теперь jQuery очень прост
$('.q').click(function(){
$(this).removeClass('q');
});
Я использовал префиксы webkit, но вы можете легко настроить его для работы в других браузерах.
Отредактированный ответ:
Изменение стилей nth-child на:
.answer1 {
-webkit-transform: translate(0px, 0px) rotate(0deg);
}
.answer2 {
-webkit-transform: translate(80px, 0px) rotate(0deg);
}
.answer3 {
-webkit-transform: translate(160px, 0px) rotate(0deg);
}
.answer4 {
-webkit-transform: translate(240px, 0px) rotate(0deg);
}
И сценарий:
var element = 1;
$('.q').click(function(){
$(this).removeClass('q').addClass("answer" + element);
element = element + 1;
});
По вашему запросу вы получили, что письма отправляются в первое доступное место.
Единственная задача напоминания - построить пролеты из массива букв. Я думаю, что у вас уже есть код, который выполняет аналогичную работу; вопрос только в его адаптации.
обновленная демо
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Имейте в виду, что JavaScript — это НЕ то же самое, что Java! Включите все ярлыки, относящиеся к вашему вопросу; например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [svelte] и т. д.