A Pen by Leskin Maksim on CodePen.
Created
June 9, 2018 18:28
-
-
Save Quper24/5052973b18786fe53f489fa1269cd5fb to your computer and use it in GitHub Desktop.
Autocomplite
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<div class="form"> | |
<input type="text" id="country" autofocus="" placeholder="Введите страну"> | |
<div id="list"></div> | |
</div> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Необходимо реализовать автодополнение. При введении в инпут первых букв страны - появляется список стран, которые начинаются на те буквы, которые вы ввели. Чем больше букв вы вводите - тем меньше стран в списке. Страну можно выбрать, кликнув по ней мышкой - в этом случае ее название появится в инпуте. | |
// Массив со списком стран я уже сделал. | |
let countries = ["Австралия", "Австрия", "Азербайджан", "Албания", "Алжир", "Ангола", "Андорра", "Антигуа и Барбуда", "Антильские острова", "Аргентина", "Армения", "Афганистан", "Багамские острова", "Бангладеш", "Барбадос", "Бахрейн", "Белиз", "Белоруссия", "Бельгия", "Бенин", "Болгария", "Боливия", "Босния и Герцеговина", "Ботсвана", "Бразилия", "Буркина-Фасо", "Бурунди", "Бутан", "Вануату", "Ватикан", "Великобритания", "Венгрия", "Венесуэла", "Вьетнам", "Габон", "Гаити", "Гайана", "Гамбия", "Гана", "Гватемала", "Гвинея", "Гвинея-Бисау", "Германия", "Голландия", "Гондурас", "Гонконг", "Гренада", "Гренландия", "Греция", "Грузия", "Гуам", "Дания", "Демократическая Республика Конго", "Джибути", "Доминиканская республика", "Египет", "Замбия", "Западная Сахара", "Зимбабве", "Израиль", "Индия", "Индонезия", "Иордания", "Ирак", "Иран", "Ирландия", "Исландия", "Испания", "Италия", "Йемен", "Кабо-Верде", "Казахстан", "Камбоджа", "Камерун", "Канада", "Катар", "Кения", "Кипр", "Киргизия", "Кирибати", "Китай", "КНДР", "Колумбия", "Коморские острова", "Коста-Рика", "Кот-д'Ивуар", "Куба", "Кувейт", "Лаос", "Латвия", "Лесото", "Либерия", "Ливан", "Ливия", "Литва", "Лихтенштейн", "Люксембург", "Маврикий", "Мавритания", "Мадагаскар", "Македония", "Малави", "Малайзия", "Мали", "Мальдивы", "Мальта", "Марокко", "Мартиника", "Мексика", "Микронезия", "Мозамбик", "Молдавия", "Монако", "Монголия", "Мьянма", "Намибия", "Непал", "Нигер", "Нигерия", "Никарагуа", "Новая Зеландия", "Новая Каледония", "Норвегия", "ОАЭ", "Оман", "Пакистан", "Палестина", "Панама", "Папуа-Новая Гвинея", "Парагвай", "Перу", "Польша", "Португалия", "Пуэрто-Рико", "Республика Конго", "Республика Корея", "Россия", "Руанда", "Румыния", "Сальвадор", "Сан-Марино", "Сан-Томе и Принсипи", "Саудовская Аравия", "Свазиленд", "Сенегал", "Сент-Китс и Невис", "Сент-Люсия", "Сербия", "Сингапур", "Сирия", "Словакия", "Словения", "Соломоновы острова", "Сомали", "Судан", "Суринам", "США", "Сьерра-Леоне", "Таджикистан", "Таиланд", "Тайвань", "Танзания", "Того", "Тонга", "Тринидад и Тобаго", "Тунис", "Туркменистан", "Турция", "Уганда", "Узбекистан", "Украина", "Уругвай", "Фиджи", "Филиппины", "Финляндия", "Франция", "Французская Гвиана", "Хорватия", "Центральноафриканская Республика", "Чад", "Черногория", "Чехия", "Чили", "Швейцария", "Швеция", "Шри-Ланка", "Эквадор", "Экваториальная Гвинея", "Эритрея", "Эстония", "Эфиопия", "ЮАР", "Ямайка", "Япония"]; | |
function autocomplete(inp, arr) { | |
let currentFocus; | |
inp.addEventListener("input", function(e) { | |
let a, b, i, val = this.value; | |
closeAllLists(); | |
if (!val) { return false;} | |
currentFocus = -1; | |
a = document.createElement("DIV"); | |
a.setAttribute("id", this.id + "autocomplete-list"); | |
a.setAttribute("class", "autocomplete-items"); | |
this.parentNode.appendChild(a); | |
for (i = 0; i < arr.length; i++) { | |
if (arr[i].substr(0, val.length).toUpperCase() == val.toUpperCase()) { | |
b = document.createElement("DIV"); | |
b.innerHTML = "<strong>" + arr[i].substr(0, val.length) + "</strong>"; | |
b.innerHTML += arr[i].substr(val.length); | |
b.innerHTML += "<input type='hidden' value='" + arr[i] + "'>"; | |
b.addEventListener("click", function(e) { | |
inp.value = this.getElementsByTagName("input")[0].value; | |
closeAllLists(); | |
}); | |
a.appendChild(b); | |
} | |
} | |
}); | |
inp.addEventListener("keydown", function(e) { | |
var x = document.getElementById(this.id + "autocomplete-list"); | |
if (x) x = x.getElementsByTagName("div"); | |
if (e.keyCode == 40) { | |
currentFocus++; | |
addActive(x); | |
} else if (e.keyCode == 38) { //up | |
currentFocus--; | |
addActive(x); | |
} else if (e.keyCode == 13) { | |
e.preventDefault(); | |
if (currentFocus > -1) { | |
if (x) x[currentFocus].click(); | |
} | |
} | |
}); | |
function addActive(x) { | |
if (!x) return false; | |
removeActive(x); | |
if (currentFocus >= x.length) currentFocus = 0; | |
if (currentFocus < 0) currentFocus = (x.length - 1); | |
x[currentFocus].classList.add("autocomplete-active"); | |
} | |
function removeActive(x) { | |
for (var i = 0; i < x.length; i++) { | |
x[i].classList.remove("autocomplete-active"); | |
} | |
} | |
function closeAllLists(elmnt) { | |
var x = document.getElementsByClassName("autocomplete-items"); | |
for (var i = 0; i < x.length; i++) { | |
if (elmnt != x[i] && elmnt != inp) { | |
x[i].parentNode.removeChild(x[i]); | |
} | |
} | |
} | |
document.addEventListener("click", function (e) { | |
closeAllLists(e.target); | |
}); | |
} | |
autocomplete(document.getElementById("country"), countries); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
.form { | |
position: absolute; | |
top: 50%; | |
left: 50%; | |
margin: -150px 0 0 -150px; | |
width:300px; | |
height:300px; | |
} | |
input { | |
width: 100%; | |
margin-bottom: 10px; | |
background: rgba(0,0,0,0.3); | |
border: none; | |
outline: none; | |
padding: 10px; | |
font-size: 13px; | |
color: #fff; | |
text-shadow: 1px 1px 1px rgba(0,0,0,0.3); | |
border: 1px solid rgba(0,0,0,0.3); | |
border-radius: 4px; | |
box-shadow: inset 0 -5px 45px rgba(100,100,100,0.2), 0 1px 1px rgba(255,255,255,0.2); | |
-webkit-transition: box-shadow .5s ease; | |
-moz-transition: box-shadow .5s ease; | |
-o-transition: box-shadow .5s ease; | |
-ms-transition: box-shadow .5s ease; | |
transition: box-shadow .5s ease; | |
text-align: center; | |
} | |
input:focus { box-shadow: inset 0 -5px 45px rgba(100,100,100,0.4), 0 1px 1px rgba(255,255,255,0.2); } | |
body { | |
width: 100%; | |
height:100%; | |
font-family: 'Open Sans', sans-serif; | |
background: #092756; | |
background: -moz-radial-gradient(0% 100%, ellipse cover, rgba(104,128,138,.4) 10%,rgba(138,114,76,0) 40%),-moz-linear-gradient(top, rgba(57,173,219,.25) 0%, rgba(42,60,87,.4) 100%), -moz-linear-gradient(-45deg, #670d10 0%, #092756 100%); | |
background: -webkit-radial-gradient(0% 100%, ellipse cover, rgba(104,128,138,.4) 10%,rgba(138,114,76,0) 40%), -webkit-linear-gradient(top, rgba(57,173,219,.25) 0%,rgba(42,60,87,.4) 100%), -webkit-linear-gradient(-45deg, #670d10 0%,#092756 100%); | |
background: -o-radial-gradient(0% 100%, ellipse cover, rgba(104,128,138,.4) 10%,rgba(138,114,76,0) 40%), -o-linear-gradient(top, rgba(57,173,219,.25) 0%,rgba(42,60,87,.4) 100%), -o-linear-gradient(-45deg, #670d10 0%,#092756 100%); | |
background: -ms-radial-gradient(0% 100%, ellipse cover, rgba(104,128,138,.4) 10%,rgba(138,114,76,0) 40%), -ms-linear-gradient(top, rgba(57,173,219,.25) 0%,rgba(42,60,87,.4) 100%), -ms-linear-gradient(-45deg, #670d10 0%,#092756 100%); | |
background: -webkit-radial-gradient(0% 100%, ellipse cover, rgba(104,128,138,.4) 10%,rgba(138,114,76,0) 40%), linear-gradient(to bottom, rgba(57,173,219,.25) 0%,rgba(42,60,87,.4) 100%), linear-gradient(135deg, #670d10 0%,#092756 100%); | |
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#3E1D6D', endColorstr='#092756',GradientType=1 ); | |
} | |
html { width: 100%; height:100%; overflow:hidden; } | |
#list { | |
color: #fff; | |
text-align: center; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment