#javascript #html #css #random
#javascript #HTML #css #Случайный
Вопрос:
Привет, у меня есть два набора кода. Первый был сделан приятным человеком на этом сайте и генерирует случайное письмо на основе выбранных пользователем флажков.
Второй — тот, который я нашел в Интернете. Это позволяет вам превращать ссылки на изображения в флажки, которые можно устанавливать и снимать.
Я пытаюсь объединить эти два кода, чтобы программа могла генерировать случайное изображение (вместо буквы) на основе массива изображений (опять же вместо букв), которые пользователь устанавливает флажками. Короче говоря, я пытаюсь получить что-то вроде первого набора кода, который использует изображения вместо букв.
Затем последнее, что я пытаюсь сделать, это добавить ползунок диапазона следующим образом (https://www.w3schools.com/code/tryit.asp?filename=GJ5U82DC2JX9 ) под каждым изображением. Я хочу, чтобы пользователь мог использовать ползунок для «взвешивания» частоты каждого проверяемого изображения при окончательной рандомизации (с диапазоном от 0 до 10).
Вот первая программа в запущенной форме:
https://www.w3schools.com/code/tryit.asp?filename=GJ5TXX8V9B7L
Вот вторая программа в запущенной форме:
https://www.w3schools.com/code/tryit.asp?filename=GJ5TXEQM6HVI
Я пытался интуитивно копировать и вставлять из одного набора в другой, но, похоже, я не могу даже приблизиться к тому, чтобы работать так, как хотелось бы. Что касается взвешивания, я в недоумении.
Спасибо за любую помощь, и если это выходит за рамки справки для этого сайта, я приношу извинения.
Ответ №1:
Нравится это?
HTML-код:
<div id="formMatrix">
<ul>
</ul>
<input id="randomSubmit" type="submit" value="Randomize">
</div>
<div id="result">
<br />
<br />
</div>
JS-код:
function updateTextInput(val, i) {
document.getElementById('textInput-' i).value = val;
}
document.addEventListener("DOMContentLoaded", function() {
//put your image's links
var images = ["http://townandcountryremovals.com/wp-content/uploads/2013/10/firefox-logo-200x200.png", "http://www.thebusinessofsports.com/wp-content/uploads/2010/10/facebook-icon-200x200.png", "http://tech21info.com/admin/wp-content/uploads/2013/03/chrome-logo-200x200.png"];
const form = document.getElementById("formMatrix");
const submitBtn = document.getElementById("randomSubmit");
const textResult = document.getElementById("result");
for (var i = 0; i < images.length; i ) {
form.getElementsByTagName('ul')[0].innerHTML = ("<li><input type='checkbox' id='chk-" i "' /><label for='chk-" i "'><img id='img-" i "' src='" images[i] "'/><div class='ranges'><input type='range' id='range-" i "' min='0' max='10' value='0' onchange='updateTextInput(this.value, " i ");' /><input type='text' disabled='disabled' id='textInput-" i "' value='0'/></div></label></li>");
}
// We check the values on the submit click
submitBtn.addEventListener("click", function(e) {
// Prevent it from *actually* submitting (e.g. refresh)
e.preventDefault();
// Grab *all* selected checkboxed into an array
const items = document.querySelectorAll("#formMatrix input:checked");
// Checking if it's not empty
if (items.length > 0) {
var array_items = [];
// Convert object to array
for (var i = 0; i < items.length; i ) {
array_items.push(items[i]);
}
// Add items by freq
for (var i = 0; i < array_items.length; i ) {
var n = parseInt(document.getElementById('textInput-' array_items[i].id.split('-')[1]).value);
for (var j = 0; j < n; j ) {
array_items.splice(i 1, 0, array_items[i]);
}
i = (i n);
}
// Setting a random index from items[0] to items[items.length]
var imgid = ('img-' array_items[Math.floor(Math.random() * array_items.length)].id.split('-')[1]);
textResult.innerHTML = ("<label><img id='imgResult' src='" document.getElementById(imgid).src "'/></label>");
} else {
// If not, we alert
alert("Please choose at least 1 image");
}
});
});
ДЕМОНСТРАЦИЯ:
https://jsfiddle.net/pr0mming/vfam3g05/31/
Чего я действительно не понимаю, так это части слайда, вы имеете в виду, что каждое изображение может иметь «весовое» число, что означает, что чем больше число, тем чаще оно должно выводиться?
ОБНОВЛЕНИЕ 1:
Самый простой способ, который я видел, состоял в том, чтобы временно обработать массив выбранных изображений, затем, если вес равен 10, в массив будут вставлены еще 10 изображений, соблюдающих порядок, и он будет выбран случайным образом.
ОБНОВЛЕНИЕ 2:
Последние изменения: https://jsfiddle.net/pr0mming/vfam3g05/33 /
Комментарии:
1. Да, точно! Итак, если изображение с ползунком на «2» будет с гораздо меньшей вероятностью отображаться при рандомизации, чем изображение на «8». Ползунки в прикрепленном файле скрипки выглядят точно так, как я предполагал, но, похоже, они не оказывают никакого влияния на взвешивание случайной генерации.
2. Хорошо, братан, посмотри, обновлен ли мой ответ и ссылка на jsfiddle
3. Вау, спасибо, кажется, это работает! И если я хочу добавить в программу больше изображений, должен ли я поместить их туда, где написано //put ссылки на ваше изображение?
4. Да, конечно, нет проблем, я поставил это так, чтобы вам не приходилось создавать все в html
5. используйте свойство width и height в строке 18 файла css для отображения более больших входных данных, для флажков, которые я скрыл с помощью css, снова просмотрите jsfiddle