Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   onkeyup, input суши (https://javascript.ru/forum/events/52549-onkeyup-input-sushi.html)

jonrut 23.12.2014 21:40

onkeyup, input суши
 
Привет!
Помогите разобраться с onkeyup для мини-игрушки. Есть поле ввода input.
Есть массив с 20 названиями суши. В папке лежит 20 изображений.
Человек вводит название в input, например "Футомаки".
onkeyup должен сработать после ввода последней буквы "и", отобразить цветную картинку с суши "Футомаки" на общей черно-белой картинке, которая загружена по умолчанию на странице. Причем каждой картинке нужно задавать позицию для отображения. После загрузки картинки поле input должно очиститься и быть готовым к вводу новых названий. В идеале нужно создать массив, куда будут закидываться правильные ответы. Как лучше это сделать? Хотя-бы на примере массива из двух вариантов, подскажите, пожалуйста.

krutoy 23.12.2014 21:58

<html>
<head>
</head>
<body>
<script>

input=document.createElement("input")
document.body.appendChild(input)

sushi=["sushi1", "sushi2", "sushi3"]
arr=[]
doStaff=function(sushi){
   arr.push(sushi) // тут непонятно, надо ли фильтровать, если слово уже в массиве
   input.value=""
   alert("hello "+sushi)
   alert("in arr: " + arr)
// there is your code -- show picture etc
}

input.oninput=function(){
   var the_sushi=sushi.indexOf(this.value)
   if(the_sushi>-1) doStaff(sushi[the_sushi])
}





</script>
 
</body>
</html>

рони 23.12.2014 22:02

jonrut,
по onkeyup проверить if(value == "Футомаки"){value = "" ; и прочее}

Safort 23.12.2014 22:14

Автор, с тебя футомаки.

<!DOCTYPE html>
<html lang="ru">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<style>
  .bg {
    background-image: url(http://th08.deviantart.net/fs5/150/i/2004/332/1/c/PIKA_by_spocha.jpg);
    height: 100px;
    background-size: contain;
    background-repeat: no-repeat;
  }
</style>
<body>

  <input type="text">
  <div class="bg"></div>

  <script>
  var words = ['футомаки', 'суперфутомаки'];
  var urls = ['http://dostavka-pizza.kiev.ua/simg/136-176-home.jpg',
              'http://www.food24.com.ua/imageshandler.ashx/Products/7/600/500/tnh_51b.jpg'];
  var searchWord = document.querySelector('input');
  var bg = document.querySelector('.bg');

  searchWord.addEventListener('keyup', function() {
    var indx = words.indexOf(searchWord.value);

    if (indx >= 0) {
      console.log(urls[indx]);
      bg.style.backgroundImage = 'url(' + urls[indx] + ')';

      searchWord.value = '';
    }
  }, false);
  </script>
  
</body>
</html>

Safort 23.12.2014 22:15

Можно ещё хэши использовать вместо двух массивов, но это уже сам решай.

krutoy 23.12.2014 22:17

рони,
Я как то раз пробовал кейап, кейдаун, и прочее, и заметил, что он медленней онинпута раз в 100, наверное. Нахрен они нужны вообще?

рони 23.12.2014 22:19

krutoy,
молодец, возьми с полки пирожок!

krutoy 23.12.2014 22:23

рони,
Не, я серьезно. Может я че не так делаю? Я понимаю, когда нужен именно онкейап, без него -- никак, но таких случаев -- раз два и обчелся. А в общем случае, нафига его пльзовать? Или я ошибся со скоростью? Может не в кейап/кейдаун было дело? Тонкости может какие? Я серьезно спрашиваю.

рони 23.12.2014 22:31

krutoy,
всё нормально, расслабьтесь. oninput подходит для решения этой задачи.

jonrut 24.12.2014 00:35

Всем спасибо!
Safort, спасибо, работает. Вот только подскажите, пожалуйста, как сделать так, чтобы бекграунд не заменялся новой картинкой, а происходило накладывание на закрепленный bg? На странице есть поле ввода и под ним bg, допустим, 1000px на 600px. Черно-белая. При вводе в input названия суши, которое человек угадывает по чернобелой картинке должна подгрузится маленькая картинка, но уже цветная, поверх ч/б с отступами, допустим, (left:20, top: 40).
Нужно ли массив создавать с картинками? Или отдельно массив, где будут координаты прописаны для каждой цветной мини-картинки? Спасибо.


Часовой пояс GMT +3, время: 17:53.