Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.06.2020, 10:18
MOT MOT вне форума
Аспирант
Отправить личное сообщение для MOT Посмотреть профиль Найти все сообщения от MOT
 
Регистрация: 30.08.2019
Сообщений: 52

Смена img в зависимости от выбранного radio
Доброго времени суток! Мне нужно сделать смену нескольких img по смене 1 radio. Код:
<!DOCTYPE html>
<html>
<head>
<style>
img {
width: 100px;
height: 100px;
}
</style>
</head>
<body>
<img src='https://image.flaticon.com/icons/svg/246/246144.svg' />
<img src='https://image.flaticon.com/icons/svg/1383/1383327.svg' />
<img src='https://image.flaticon.com/icons/svg/324/324084.svg' />
<!--Вместо первой картинки при измении позиции radio: https://image.flaticon.com/icons/svg/220/220603.svg -->
<!--Вместо второй картинки -||- https://image.flaticon.com/icons/png/512/1383/1383260.png -->
<!--Вместо третьей картинки -||- https://image.flaticon.com/icons/png/512/324/324107.png -->
<label><input type="radio" id="Wb" name="img" checked>ЧБ</label>
<label><input type="radio" id="color" name="img">Цвет</label>
</body>
</html>

Были попытки на js, но эти попытки дают лишь смену 1 img. Помогите реализовать смену img на js (не автоматическую).
Ответить с цитированием
  #2 (permalink)  
Старый 10.06.2020, 10:45
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

MOT,
https://javascript.ru/forum/events/8...tml#post525245
Ответить с цитированием
  #3 (permalink)  
Старый 10.06.2020, 11:01
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 641

<!DOCTYPE html>
<html>

<head>
  <style>
    img {
      width: 100px;
      height: 100px;
    }
  </style>
</head>

<body>
  <img class="image-placeholder" />
  <img class="image-placeholder" />
  <img class="image-placeholder" />
  <label><input type="radio" name="img" value="0" checked>ЧБ</label>
  <label><input type="radio" name="img" value="1">Цвет</label>
</body>

<script>
  const images = {
    "0": [
      'https://image.flaticon.com/icons/svg/246/246144.svg',
      'https://image.flaticon.com/icons/svg/1383/1383327.svg',
      'https://image.flaticon.com/icons/svg/324/324084.svg',
    ],
    "1": [
      'https://image.flaticon.com/icons/svg/220/220603.svg',
      'https://image.flaticon.com/icons/png/512/1383/1383260.png',
      'https://image.flaticon.com/icons/png/512/324/324107.png',
    ]
  };
  document.addEventListener('DOMContentLoaded', () => {
    const inputRadios = document.querySelectorAll('input[name="img"]');
    const imagePlaceholders = document.querySelectorAll('img.image-placeholder');
    function onChange() {
      const { value } = [...inputRadios].find(i => i.checked === true);
      imagePlaceholders.forEach((imgTag, index) => imgTag.src = images[value][index]);
    }
    inputRadios.forEach(r => r.addEventListener('change', onChange));
    onChange();
  });
</script>

</html>
Ответить с цитированием
  #4 (permalink)  
Старый 10.06.2020, 13:18
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126


... как вариант
<!DOCTYPE html>
<html>

<head>
    <style>
        img {
            width: 100px;
            height: 100px;
        }
    </style>
</head>

<body>
    <img class="image-placeholder" />
    <img class="image-placeholder" />
    <img class="image-placeholder" />
    <label><input type="radio" name="img" checked>ЧБ</label>
    <label><input type="radio" name="img" >Цвет</label>
</body>

<script>
    const images = {
        "0": [
            'https://image.flaticon.com/icons/svg/246/246144.svg',
            'https://image.flaticon.com/icons/svg/1383/1383327.svg',
            'https://image.flaticon.com/icons/svg/324/324084.svg',
        ],
        "1": [
            'https://image.flaticon.com/icons/svg/220/220603.svg',
            'https://image.flaticon.com/icons/png/512/1383/1383260.png',
            'https://image.flaticon.com/icons/png/512/324/324107.png',
        ]
    };
    document.addEventListener('DOMContentLoaded', () => {
        const inputRadios = document.querySelectorAll('input[name="img"]');
        const imagePlaceholders = document.querySelectorAll('img.image-placeholder');
        const onChange = value => () => imagePlaceholders.forEach((imgTag, index) => imgTag.src = images[value][index]);
        inputRadios.forEach((r, i)  => (i = onChange(i), r.addEventListener('change', i), r.checked && i()));
    });
</script>

</html>
Ответить с цитированием
  #5 (permalink)  
Старый 10.06.2020, 14:27
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 641

рони, ыыы

дубль три )
<!DOCTYPE html>
<html>

<head>
  <style>
    img {
      width: 100px;
      height: 100px;
    }
  </style>
</head>

<body>
  <img class="image-placeholder" />
  <img class="image-placeholder" />
  <img class="image-placeholder" />
  <label><input type="radio" name="img" value="0" checked>ЧБ</label>
  <label><input type="radio" name="img" value="1">Цвет</label>
</body>

<script>
  const images = {
    "0": [
      'https://image.flaticon.com/icons/svg/246/246144.svg',
      'https://image.flaticon.com/icons/svg/1383/1383327.svg',
      'https://image.flaticon.com/icons/svg/324/324084.svg',
    ],
    "1": [
      'https://image.flaticon.com/icons/svg/220/220603.svg',
      'https://image.flaticon.com/icons/png/512/1383/1383260.png',
      'https://image.flaticon.com/icons/png/512/324/324107.png',
    ]
  };
  document.addEventListener('DOMContentLoaded', () => {
    const radios = document.querySelectorAll('input[type="radio"][name="img"]');
    const placeholders = document.querySelectorAll('img.image-placeholder');
    const onChange = ({ target: { value = 0 } = {} } = {}) => placeholders.forEach((p, i) => p.src = images[value][i]);
    radios.forEach(r => r.addEventListener('change', onChange));
    onChange();
  });
</script>

</html>


<!DOCTYPE html>
<html>

<head>
  <style>
    img {
      width: 100px;
      height: 100px;
    }
  </style>
</head>

<body>
  <img class="image-placeholder" />
  <img class="image-placeholder" />
  <img class="image-placeholder" />
  <label><input type="radio" name="img" value="0" checked>ЧБ</label>
  <label><input type="radio" name="img" value="1">Цвет</label>
</body>

<script>
  const images = {
    "0": [
      'https://image.flaticon.com/icons/svg/246/246144.svg',
      'https://image.flaticon.com/icons/svg/1383/1383327.svg',
      'https://image.flaticon.com/icons/svg/324/324084.svg',
    ],
    "1": [
      'https://image.flaticon.com/icons/svg/220/220603.svg',
      'https://image.flaticon.com/icons/png/512/1383/1383260.png',
      'https://image.flaticon.com/icons/png/512/324/324107.png',
    ]
  };
  document.addEventListener('DOMContentLoaded', () => {
    const placeholders = document.querySelectorAll('img.image-placeholder');
    const onChange = ({ target: { value = 0 } = {} } = {}) => placeholders.forEach((p, i) => p.src = images[value][i]);
    document.querySelectorAll('input[type="radio"][name="img"]').forEach(r => r.addEventListener('change', onChange))
    onChange()
  });
</script>

</html>

Последний раз редактировалось SuperZen, 10.06.2020 в 14:43.
Ответить с цитированием
  #6 (permalink)  
Старый 10.06.2020, 14:49
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Почему бы не

<form><label><input type="radio" ...
и
document.querySelector('form').addEventListener('c hange', (e) => e.target.value ...
Ответить с цитированием
  #7 (permalink)  
Старый 10.06.2020, 14:53
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

SuperZen,
Ответить с цитированием
  #8 (permalink)  
Старый 11.06.2020, 09:19
MOT MOT вне форума
Аспирант
Отправить личное сообщение для MOT Посмотреть профиль Найти все сообщения от MOT
 
Регистрация: 30.08.2019
Сообщений: 52

SuperZen,
что нужно изменить в посте 3, чтобы при закрытии вкладки и при повторном открытии, тема значков оставалась как перед закрытием (вернее как использовать localStorage в вашем случае?)
Ответить с цитированием
  #9 (permalink)  
Старый 11.06.2020, 09:45
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Сообщение от MOT
что нужно изменить в посте 3
document.addEventListener('DOMContentLoaded', () => {
        const inputRadios = document.querySelectorAll('input[name="img"]');
        const imagePlaceholders = document.querySelectorAll('img.image-placeholder');
        function onChange() {
            const { value } = [...inputRadios].find(i => i.checked === true);
            localStorage.indexChecked = value;
            imagePlaceholders.forEach((imgTag, index) => imgTag.src = images[value][index]);
        }
        inputRadios.forEach(r => r.addEventListener('change', onChange));
        inputRadios[localStorage.indexChecked||0].checked = true;
        onChange();
    });
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать вывод sabmit в зависимости от radio кнопки Andrey3443 Общие вопросы Javascript 1 25.11.2018 09:55
Radio как сделать неактивной в зависимости от другого radio? GTMichael Элементы интерфейса 3 30.08.2017 16:29
Cмена div'ов в зависимости от кнопки radio d1mka21 jQuery 18 25.11.2015 16:07
html код в зависимости от выбора radio Findail Общие вопросы Javascript 6 30.03.2013 12:53
<select> в зависимости от выбранного radio imediasun1 Элементы интерфейса 1 23.12.2012 23:38