Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Вывод изображение по координатам при нажатии кнопки (https://javascript.ru/forum/events/81707-vyvod-izobrazhenie-po-koordinatam-pri-nazhatii-knopki.html)

sssema96 15.01.2021 12:32

Вывод изображение по координатам при нажатии кнопки
 
Здравствуйте. Есть 2 штуки button - красная и зеленая при нажатии на которые выводятся изображения которые накладываются друг на друга, нужно как-то организовать тоже самое только что бы эти изображения выводились в заданных координатах. Алгоритм такой: нажал на зеленую кнопку появилось 1-е изображение, нажал на красную кнопку первое исчезло и появилось 2-е изображение.
<style>
.green_button_2 {
      background-image: url("img/Green Button.png"); /*фон красной кнопки*/
      width: 53px; /*размер кнопки по ширине*/
      height: 59px; /*размер кнопки по высоте*/
      cursor: pointer;
    }
    .red_button_2{
      background-image: url("img/Red Button.png"); /*фон зеленой кнопки */
      width: 53px; /*размер кнопки по ширине*/
      height: 59px; /*размер кнопки по высоте*/
      cursor: pointer;
    } </style>
<button class="show-image red_button_2" data="img/red led.png" type="button" id="click_red2"></button>   <!--1-е изображение red led.png -->
<button class="show-image green_button_2" data="img/Gren led.png" type="button" id="click_green2"></button>   <!-- 2-е изображение Gren led.png -->
<div id="open_img"></div>

window.onload = function(){
  let buttons = document.querySelectorAll('.show-image');
 
  buttons.forEach(function(btn){
    btn.addEventListener('click', function(){
 
      document.getElementById('open_img').innerHTML = '';
 
      let link = this.getAttribute('data');
      let img = document.createElement('img');
 
      img.src = link;
 
      document.getElementById('open_img').append(img);
 
    });
  });
};

рони 15.01.2021 12:55

sssema96,
<button class="show-image red_button_2" data-link="img/red led.png"
data--top="" data-left=""
type="button" id="click_red2"></button>

Цитата:

Сообщение от sssema96
this.getAttribute('data');



читать про dataset

sssema96 15.01.2021 20:39

рони,
Прочитал про dataset. Не совсем ясно решение.
<button class="show-image red_button_2" data-link="img/red led.png"
data-top="500px" data-left="800px"
type="button" id="click_red2"></button>

В JS изменил
let link = document.button.dataset.link;
let img = document.createElement('img');
      img.src = link;
Не работает и не совсем ясно как с data-top и data-left работать.

voraa 15.01.2021 20:55

window.onload = function(){
  let buttons = document.querySelectorAll('.show-image');
  
  buttons.forEach(function(btn){
    btn.addEventListener('click', function(){
  
      document.getElementById('open_img').innerHTML = '';
      let img = document.createElement('img');
      img.style.position = 'absolute';
      img.style.left = btn.dataset.left
      img.style.top = btn.dataset.top
      img.src = btn.dataset.link;
  
      document.getElementById('open_img').append(img);
  
    });
  });
};

рони 15.01.2021 21:03

sssema96,
<!DOCTYPE html>
<html>
<head>
    <title>Untitled</title>
    <meta charset="utf-8">
    <style type="text/css">
    .green_button_2 {
            background-image: url("img/Green Button.png"); /*фон красной кнопки*/
            width: 53px; /*размер кнопки по ширине*/
            height: 59px; /*размер кнопки по высоте*/
            cursor: pointer;
        }
        .red_button_2{
            background-image: url("img/Red Button.png"); /*фон зеленой кнопки */
            width: 53px; /*размер кнопки по ширине*/
            height: 59px; /*размер кнопки по высоте*/
            cursor: pointer;
        }
        body{
            position: relative;
        }
        #open_img{
            position: absolute;
        }
        .show-image{
            outline: none;
        }
    </style>
<script>
window.addEventListener( "load" , function() {
const buttons = document.querySelectorAll('.show-image'),
div = document.getElementById('open_img'),
img = new Image;
    buttons.forEach(function(btn){
        const {link, top, left} = btn.dataset;
        btn.addEventListener('click', function(){
            img.src = link;
            div.append(img);
            Object.assign(div.style, {top,left})
        });
    });
  });
</script>
</head>
<body>
<button class="show-image red_button_2" data-link="https://picsum.photos/170/120?1"
data-top="100px" data-left="80px"
type="button" id="click_red2"></button>
<button class="show-image red_button_2" data-link="https://picsum.photos/170/120?2"
data-top="200px" data-left="280px"
type="button" id="click_red2"></button>
<div id="open_img"></div>
</body>
</html>

sssema96 20.01.2021 17:22

voraa,
рони,
А подскажите если у меня есть два блока
<div id="open_img"></div>
и
<div id="open_img2"></div>

Используя этот же код, можно ли вывести изображение при нажатии на
<button class="show-image red_button_2" data-link="https://picsum.photos/170/120?1"data-top="100px" data-left="80px"type="button" id="click_red2"></button>
в двух разных блоках? Внутри блока open_img изображение будет в координатах 100px и 80px, внутри блока open_img2 в координатах 50px и 50px.

рони 20.01.2021 17:41

sssema96,
после клика подождать, картинка в грузится нужно время
<!DOCTYPE html>
<html>
<head>
        <title>Untitled</title>
        <meta charset="utf-8">
        <style type="text/css">
        .green_button_2 {
            background-image: url('img/Green Button.png'); /*фон красной кнопки*/
            width: 53px; /*размер кнопки по ширине*/
            height: 59px; /*размер кнопки по высоте*/
            cursor: pointer;
        }
        .red_button_2 {
            background-image: url('img/Red Button.png'); /*фон зеленой кнопки */
            width: 53px; /*размер кнопки по ширине*/
            height: 59px; /*размер кнопки по высоте*/
            cursor: pointer;
        }
        .open_img img{
            position: absolute;
        }

        .open_img {
            position: relative;
            width: 300px;
            height: 300px;
            border: 1px red solid;
        }
        .show-image {
            outline: none;
        }
        </style>
<script>
window.addEventListener( "load" , function() {
const buttons = document.querySelectorAll('.show-image'),
      divs = document.querySelectorAll('.open_img');
        buttons.forEach(function(btn){
                const {link, top, left, index} = btn.dataset,
                        div = divs[index],
                        img = new Image;
                        img.src = link;
                btn.addEventListener('click', function(){
                        div.append(img);
                        Object.assign(img.style, {top,left})
                });
        });
    });
</script>
</head>
<body>
<button class="show-image red_button_2" data-link="https://picsum.photos/170/120?1"
data-top="100px" data-left="80px" data-index="0"
type="button" id="click_red2"></button>
<button class="show-image red_button_2" data-link="https://picsum.photos/170/120?2"
data-top="50px" data-left="50px" data-index="1"
type="button" id="click_red2"></button>
<div class="open_img"></div>
<div class="open_img"></div>

</body>
</html>

sssema96 20.01.2021 18:30

рони,
Немного не так. Мне нужно что бы одной кнопкой одновременно выводились два этих изображения в два эти блока.

рони 20.01.2021 18:31

sssema96,
создай массив и сделай цикл по массиву

рони 20.01.2021 18:50

sssema96,
<!DOCTYPE html>
<html>
<head>
        <title>Untitled</title>
        <meta charset="utf-8">
        <style type="text/css">
        .green_button_2 {
            background-image: url('img/Green Button.png'); /*фон красной кнопки*/
            width: 53px; /*размер кнопки по ширине*/
            height: 59px; /*размер кнопки по высоте*/
            cursor: pointer;
        }
        .red_button_2 {
            background-image: url('img/Red Button.png'); /*фон зеленой кнопки */
            width: 53px; /*размер кнопки по ширине*/
            height: 59px; /*размер кнопки по высоте*/
            cursor: pointer;
        }
        .open_img img{
            position: absolute;
        }
        .open_img {
            position: relative;
            width: 300px;
            height: 300px;
            border: 1px red solid;
        }
        .show-image {
            outline: none;
        }
        </style>
<script>
window.addEventListener("load", function() {
    const button = document.querySelector('.show-image'),
        divs = document.querySelectorAll('.open_img'),
        data = [{
                link: "https://picsum.photos/170/120?1",
                top: "100px",
                left: "80px",
                index: 0
            },
            {
                link: "https://picsum.photos/170/120?2",
                top: "50px",
                left: "50px",
                index: 1
            }
        ],
        elems = data.map(({link, top, left,index}) => {
            const div = divs[index], img = new Image;
            img.src = link;
            Object.assign(img.style, {top, left})
            return {div, img}
        })
    button.addEventListener('click', function() {
        elems.forEach(({div, img}) => div.append(img))
    });
});
</script>
</head>
<body>
<button class="show-image red_button_2" type="button"></button>
<div class="open_img"></div>
<div class="open_img"></div>
</body>
</html>


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