Показать сообщение отдельно
  #6 (permalink)  
Старый 04.02.2017, 11:07
Кандидат Javascript-наук
Отправить личное сообщение для Diphenyl Oxalate Посмотреть профиль Найти все сообщения от Diphenyl Oxalate
 
Регистрация: 21.01.2017
Сообщений: 139

Опять какая-то шизофрения.

Задача: сделать плагин explode (при клике элемент "разлетается" на части).
План:
- создать NxN ячеек с overflow=hidden (с этим проблем нет)
- поместить туда копии элемента (вот здесь проблема)
- сдвинуть маргинами, анимировать

Никак не могу поместить копии элемента в ячейки.

Если поставить var tileContent = elem.outerHTML; (восьмая строчка в коде), то оригинальный элемент чудесным образом не удаляется, а в ячейки не добавляются! Если же вместо outerHTML поставить innerHTML, то всё работает, но стили оригинального элемента теряются, чего допустить нельзя. cloneNode не помогает, эффект такой же, как с outerHTML.

function Explode( elem, num ) {
	num = num || 3; // num*num ячеек
	var pos = elem.getBoundingClientRect();
	var top = pos.top;
	var left = pos.left;
	var width = Math.round( elem.clientWidth / num );
	var height = Math.round( elem.clientHeight / num );
	var tileContent = elem.outerHTML;
	elem.parentNode.removeChild( elem );
	for ( var i = 0; i < num; i++ ) {
		for ( var j = 0; j < num; j++ ) {
			var tile = document.createElement( "DIV" );
			document.body.appendChild( tile );
			tile.style.position = "fixed";
			tile.style.width = width;
			tile.style.height = height;
			tile.style.top = top + height * i;
			tile.style.left = left + width * j;
			tile.style.border = "1px solid #000000";
			tile.style.overflow = "hidden";
			tile.innerHTML = tileContent;
		}
	}
}


UPD: этот глюк только если у оригинального элемента position=fixed.

Последний раз редактировалось Diphenyl Oxalate, 04.02.2017 в 11:11.
Ответить с цитированием