Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   первый запуск в хроме (https://javascript.ru/forum/css-html/78184-pervyjj-zapusk-v-khrome.html)

yarnik 06.08.2019 14:50

первый запуск в хроме
 
приветствую.
помогите понять в чем проблемка зарыта.
при первом запуске и первом клике на картинку в хроме не отображается фотка, второй и последующие разы все нормально.
<img src="foto.jpg" class="right toModal">

<script>
window.onload = function () {
	// Modal window
	var image = document.getElementsByClassName("toModal");
	if (image.length) {
		document.body.innerHTML += '<div id="modalDiv"><img id="modalImg"></div>';
		var modalDiv = document.getElementById("modalDiv");
		var modalImg = document.getElementById('modalImg');
		for (var i = 0; i < image.length; i++) {
			image[i].onclick = function(){
				modalDiv.style.display = "block";
				modalImg.src = this.src;
				var w = window.innerWidth;
				var h = window.innerHeight;
				var coef = 2;
				// смотрим что бы поместились в экран
				if (modalImg.naturalWidth*coef > w || modalImg.naturalHeight*coef > h) {
					coef = modalImg.naturalWidth*coef / w > modalImg.naturalHeight*coef / h ? w / modalImg.naturalWidth : h / modalImg.naturalHeight;
				}
				modalImg.style.height = modalImg.naturalHeight*coef + 'px';
				modalImg.style.width = modalImg.naturalWidth*coef + 'px';
			}
		}
		modalDiv.onclick = function() {
			modalDiv.style.display = "none";
		}
	}
}
</script>

ksa 06.08.2019 15:34

Цитата:

Сообщение от yarnik
document.body.innerHTML += '<div id="modalDiv"><img id="modalImg"></div>';

Не делай так... :no:

yarnik 06.08.2019 17:53

Цитата:

Сообщение от ksa (Сообщение 511321)
Не делай так... :no:

Как тогда?
Сеошники требуют не вставлять прямо в html код.

рони 06.08.2019 18:39

Цитата:

Сообщение от yarnik
Как тогда?

Изменение документа

yarnik 06.08.2019 20:56

отремонтировал Хром, поломал ИЕ
<script>
window.onload = function () {
	// Modal window
	var image = document.getElementsByClassName("toModal");
	if (image.length) {
		//document.body.innerHTML += '<div id="modalDiv"><img id="modalImg"></div>';
		let div = document.createElement('div');
		div.id = "modalDiv";
		document.body.append(div);
		let img = document.createElement("img");
		img.id = "modalImg";
		document.getElementById("modalDiv").appendChild(img);
		var modalDiv = document.getElementById("modalDiv");
		var modalImg = document.getElementById('modalImg');
		for (var i = 0; i < image.length; i++) {
			image[i].onclick = function(){
				modalDiv.style.display = "block";
				modalImg.src = this.src;
				var w = window.innerWidth;
				var h = window.innerHeight;
				var coef = 2;
				// смотрим что бы поместились в экран
				if (modalImg.naturalWidth*coef > w || modalImg.naturalHeight*coef > h) {
					coef = modalImg.naturalWidth*coef / w > modalImg.naturalHeight*coef / h ? w / modalImg.naturalWidth : h / modalImg.naturalHeight;
				}
				modalImg.style.height = modalImg.naturalHeight*coef + 'px';
				modalImg.style.width = modalImg.naturalWidth*coef + 'px';
			}
		}
		modalDiv.onclick = function() {
			modalDiv.style.display = "none";
		}
	}
}
</script>

рони 06.08.2019 21:55

yarnik,
строка 9, сделайте как в строке 12.

yarnik 06.08.2019 23:24

document.body.appendChild(div);


Благодарю, заработало!

Было бы очень великолепно для собственного осознания осознать почему не работало в начальном варианте и почему ИЕ не воспринял append

рони 06.08.2019 23:29

Цитата:

Сообщение от yarnik
почему ИЕ не воспринял append

ответ по ссылке, в конце страницы.
https://developer.mozilla.org/ru/doc...entNode/append

рони 06.08.2019 23:35

Цитата:

Сообщение от yarnik
почему не работало в начальном варианте

Будьте внимательны: «innerHTML+=» осуществляет перезапись

j0hnik 07.08.2019 00:31

Цитата:

Сообщение от yarnik (Сообщение 511327)
Как тогда?
Сеошники требуют не вставлять прямо в html код.

Сеошники из прошлого века, уже года два и яндекс и гугл читает содержимое скриптов


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