Вывод изображение по координатам при нажатии кнопки
Здравствуйте. Есть 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); }); }); }; |
sssema96,
<button class="show-image red_button_2" data-link="img/red led.png" data--top="" data-left="" type="button" id="click_red2"></button> Цитата:
читать про dataset |
рони,
Прочитал про 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 работать. |
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); }); }); }; |
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> |
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. |
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,
создай массив и сделай цикл по массиву |
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. |