визуализировать один div и его интерактивный контент, нажав на другой div

0
<div id="1" class="aaa" style="position: relative; left: 50px; top: 50px; width: 300px; height: 200px; border: solid 1px; background: #dddddd; overflow: hidden;">
    <div style="position: relative; left: 30px; top: 25px; width: 100px; height: 50px; background: blue;" onmouseenter="this.style.background='red';"></div>
    <div style="position: relative; left: 160px; top: 70px; width: 100px; height: 50px; background: blue;" onmouseenter="this.style.background='orange';"></div>
</div>
<div id="2" class="bbb" style="position: relative; left: 250px; top: 100px; width: 50px; height: 20px; border: solid 1px; background: #cccccc; text-align: center; overflow: hidden;">click</div>

http://jsfiddle.net/FWyBQ/

У меня есть один div (id = "1" class= "aaa"), который содержит несколько интерактивных div. Состояние этого интерактивного контента должно отображаться как изображение (gif?) С щелчком на другом div (id = "2" class= "bbb").

Это изображение желательно открыть в новой вкладке или окне. Или, может быть, просто щелкните правой кнопкой мыши> сохранить как на месте.

ps Я знаю о сценариях, таких как html2canvas и phantomjs, но я понятия не имею, как их реализовать в моем случае.

редактировать:

Теперь я пытаюсь реализовать это решение, которое с небольшой настройкой должно работать с process.js(http://cloud.github.com/downloads/processing-js/processing-js/processing-1.4.1.min. js).

Я думаю, мне нужен только правильный код jquery с обработкой. Js, чтобы получить нужные мне функциональные возможности. Я пробовал это, и он не работает:

$('.bbb').click(function (e) {
        var canvas = document.getElementById("1"),
            img    = canvas.toDataURL("image/png");
        $('.aaa').document.write('<img src="'+img+'"/>');
    });
Теги:
function
html-rendering

2 ответа

1
Лучший ответ

Вы можете использовать html2canvas для этого; включите библиотеку html2canvas на свою страницу и попробуйте что-то вроде этого:

  //element would be your aaa div
  html2canvas(element, {
    onrendered: function(canvas) {
        // canvas is the resulting canvas generated from the element
        var url = canvas.toDataURL("image/png");
    }
  });

Затем вам нужно будет опубликовать значение "url" для скрипта PHP, как в одном из ответов на этот вопрос.

РЕДАКТИРОВАТЬ

Причина, по которой ваш новый код не работает, состоит в том, что элемент с идентификатором "1" не является элементом холста. Его div.

Методы холста, такие как toDataUrl(), могут быть вызваны только на элементы Canvas (поэтому я предложил использовать html2canvas для изменения вашего div в Canvas).

Я разветкил ваш jsfiddle, чтобы показать, как код может работать, если элемент с идентификатором "1" был холстом:

http://jsfiddle.net/_Pez/cksGt/1/

_Pez

  • 0
    Я пытался объединить что-то (в том числе код из html2canvas.js) без успеха. Сейчас я пытаюсь реализовать выбранное решение по предоставленной вами ссылке - кажется простым и похоже, что оно должно работать. Я редактировал вопрос.
  • 0
    Хорошо, я обновил свой ответ и связался с скрипкой, чтобы показать, что я имею в виду.
Показать ещё 1 комментарий
0

Если бы я был в штанах, я бы начал с переключения первого div на запись SVG. Это не так уж и много, и есть много способов экспортировать svg-объект в png.

Это должно заставить вас начать

<svg id="1" class="aaa" width="400" height="250">
     <g>
        <rect id="svg_0" height="200" width="300" y="50" x="50" stroke-width="1" stroke="#000000" fill="#dddddd"/>
        <rect id="svg_1" height="50" width="100" y="75" x="80" stroke-width="5" fill="blue"/>
        <rect id="svg_2" height="50" width="100" y="120" x="210" stroke-width="5"  fill="blue"/>
    </g>
</svg>

<div id="2" class="bbb" style="position: relative; left: 250px; top: 100px; width: 50px; height: 20px; border: solid 1px; background: #cccccc; text-align: center; overflow: hidden;">click</div>
  • 0
    Я не думаю, что это было бы то, что мне нужно, потому что мне нужны интерактивные div, как в моей скрипке. Кроме того, у меня есть много div и несколько страниц.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню