Я посмотрел на несколько вопросов, но, похоже, ни один из них не решил мою проблему.Проект должен открыть список смайликов внутри div (модальный).Поэтому, когда пользователи нажимают кнопку смайликов, появляется модал с смайликами.Если мы перечислим сотни смайликов, то это почти мгновенно будет сделано.Если мы поместим тысячи смайликов, то для загрузки модала потребуется несколько секунд.
Я предоставил фрагмент демонстрационного массива смайликов.Пробовал классический подход, а также createDocumentFragment (вдохновленный здесь ), оба они имеют одинаковый эффект.
Ищите решение, которое может воспроизводить эмодзи по одному, как в очереди,Я знаю, что могу поместить элемент DOM в очередь, и когда он будет загружен, я смогу перейти к следующему элементу.Единственное, что я не знаю, когда отображается content.appendChild(button)
или fragment.appendChild(button)
.Я читал, что вы можете использовать функцию setTimeout
, но я не знаю, какое время устанавливать или рекомендуется ли в этом случае.
Спасибо!
function showEmojis() {
let symbols = [
"☺", "☻", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?",
"?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?",
"?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?",
"?" , "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?",
"☹", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?",
"?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?",
"?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?",
"?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?",
"?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?",
"?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?",
"?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?",
"?", "?", "?", "?", "?", "?", "?", "?", "☠", "?", "?", "?", "?", "?",
"?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?",
"?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?",
"?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?",
"?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?",
"?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?",
"?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?",
"?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?",
"?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?",
"?", "?", "?", "?", "☕", "?", "?", "?", "?", "?", "?", "?", "?"]
// Just to a have big array with emojis
for (var i = 0; i < 6; i++) {
symbols = symbols.concat(symbols)
}
let content = document.getElementById("content")
// Simple for
/*
for(var i=0; i < symbols.length; i++) {
let unicode = symbols[i]
let button = document.createElement("button")
button.classList.add("emoji-button")
button.innerHTML = unicode
button.onclick = function() {
console.log("selected")
}
content.appendChild(button)
}*/
// Document fragment
var fragment = document.createDocumentFragment()
for (var i = 0; i < symbols.length; i++) {
let unicode = symbols[i]
let button = document.createElement("button")
button.classList.add("emoji-button")
button.innerHTML = unicode
button.onclick = function() {
console.log("selected")
}
fragment.appendChild(button)
}
content.appendChild(fragment)
}
.emoji-show-button {
font-size: 15px;
}
.emoji-button {
width: 28px;
height: 28px;
padding: 0px;
margin: 5px;
background: white;
border-style: none;
font-size: 20px;
}
<button class="emoji-show-button" onclick="showEmojis()">Show emojis</button>
<div id="content"></div>