Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Получение размера изображения (https://javascript.ru/forum/misc/40721-poluchenie-razmera-izobrazheniya.html)

clampson 17.08.2013 03:51

Получение размера изображения
 
Привет народ, написал небольшой скриптик, который добавляет onclick
с функцией открытия в новом окне ко всем изображениям. По первому клику всё работает как положено, но стоит закрыть всплывающее окно
и повторно клацнуть по тому же изображению и image.width вместо размера оригинальной картинки отдаёт нуль ... Почему так происходит и как с этим бороться? :)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
    <HEAD>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
     <TITLE>HTML  документ</TITLE>


<script type="text/javascript">

window.onload = function () {
	var imgs = document.getElementsByTagName('img');
    	var length = imgs.length;
 
	for (var i = 0; i < length; i++) {
        imgs[i].setAttribute("onclick", "openImageWindow(this.src);"); 
	};
};

  function openImageWindow(src) {
    var image = new Image();
    image.src = src;
    var width = image.width;
    var height = image.height;
 
     alert(width);
    if (width>600){
        width =width/2;
        height =height/2 ;
   }
    window.open(src,"Image","width=" + width + ",height=" + height + + 
 "toolbar=no,status=no,scrollbars=no,menubar=no,resizable=no"+',left=' + ((window.innerWidth - width)/2) + ',top=' + ((window.innerHeight - height)/2));
  }
</script>

    </HEAD>
<BODY>


<img src="123.jpg" width="500"  height="400"  />
<img src="12345.png"  />
</BODY>
</HTML>

danik.js 17.08.2013 11:30

Цитата:

Сообщение от clampson
        imgs[i].setAttribute("onclick", "openImageWindow(this.src);");

не используй атрибут. Используй свойство:
imgs[i].onclick = function() { openImageWindow(this.src) }


А зачем в окне открывать изображение тех же самых размеров что на странице? В чем профит то? Ладно бы увеличенное открывать, но тут таже картинка..

clampson 17.08.2013 16:52

Цитата:

Сообщение от danik.js (Сообщение 267926)
не используй атрибут. Используй свойство:
imgs[i].onclick = function() { openImageWindow(this.src) }

спасибо буду знать, но как это решает проблему? Как по второму клику на той же картинке в width передавался нуль так и передаётся. И да, изображение открывается не как на странице, а как раз оригинального размера (попробуй запустить :) ), просто если оно больше 600 пикселей в ширину, размеры делятся пополам ... или я чего то не понимаю?

clampson 17.08.2013 17:14

Кстати сказать, сейчас эмпирическим путем было вычислено что проблема есть только в chrome, firefox отдаёт правильный размер каритнки при каждом клике

clampson 17.08.2013 17:15

Я знаю что делаю что то не так, подскажите как написать грамотно

danik.js 17.08.2013 17:54

Для начала нужно создавать превьюшки а не ужимать картинки через css. Кто ж так делает то, а?

ruslan_mart 17.08.2013 18:23

clampson, onload поставьте.

var image = new Image();
image.src = 'image.jpg';
image.onload = function() {
   alert( [image.width, image.height] );
}

рони 17.08.2013 18:24

clampson,
проблемы в chrome необнаружил ... :-?
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <script type="text/javascript">

window.onload = function () {
	var imgs = document.getElementsByTagName('img');
    	var length = imgs.length;

	for (var i = 0; i < length; i++) {
        imgs[i].onclick=function ()
{
  openImageWindow(this);
}
	};
};

  function openImageWindow(img) {

    var src = img.src;
    var width = img.width;
    var height = img.height;

     alert(width);
    if (width>600){
        width =width/2;
        height =height/2 ;
   }
    window.open(src,"Image","width=" + width + ",height=" + height + "toolbar=no,status=no,scrollbars=no,menubar=no,resizable=no"+',left=' + ((window.innerWidth - width)/2) + ',top=' + ((window.innerHeight - height)/2));
  }
</script>

</head>

<body>
<img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif" width="500"  height="400"  />
<img src="http://clampson.ru/img/123.png"  />
</body>

</html>

рони 17.08.2013 18:26

Ruslan_xDD,
на всякий случай сначала onload потом src

clampson 17.08.2013 19:14

Цитата:

Сообщение от danik.js (Сообщение 267952)
Для начала нужно создавать превьюшки а не ужимать картинки через css. Кто ж так делает то, а?

Так делают очень много людей, кто при создании статьи пользуется визуальными редакторами с возможностью вставки изображения, например WYSIWYG, CKEditor

clampson 17.08.2013 19:27

Цитата:

Сообщение от рони (Сообщение 267956)
clampson,
проблемы в chrome необнаружил ... :-?


ваш код с this
http://clampson.ru/test/index2.html


мой:
http://clampson.ru/test/

видите разницу?

clampson 17.08.2013 19:38

кажется придумал как сделать что бы работало как я хочу, сейчас попробую ...

clampson 17.08.2013 20:24

Сделал вот так, коряво наверно, зато работает
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
    <HEAD>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

    <TITLE>HTML  документ</TITLE>


<script type="text/javascript">

window.onload = function () {
	var imgs = document.getElementsByTagName('img');
    	var length = imgs.length;
    

	for (var i = 0; i < length; i++) {
        
		
		var image = new Image();
        image.src = imgs[i].src; 
		
        imgs[i].setAttribute("onclick", "openImageWindow(this.src,"+image.width+","+image.height+");"); 
	};
};

  function openImageWindow(src, width, height) { 
     alert(width);
    if (width>600){
        width =width/2;
        height =height/2 ;
   }
    window.open(src,"Image","width=" + width + ",height=" + height + + 
 "toolbar=no,status=no,scrollbars=no,menubar=no,resizable=no"+',left=' + ((window.innerWidth - width)/2) + ',top=' + ((window.innerHeight - height)/2));
  }
</script>

    </HEAD>
<BODY>
<img src="123.jpg" width="100"  height="100"  />
<img src="12345.png"  width="100"  height="100" />
<img src="oboi.jpg"  width="100"  height="100" />
</BODY>
</HTML>

Спасибо, всем кто откликнулся :)

danik.js 17.08.2013 21:18

Цитата:

Сообщение от clampson
Так делают очень много людей, кто при создании статьи пользуется визуальными редакторами с возможностью вставки изображения, например WYSIWYG, CKEditor

И это очень хреново. Особенно хреново для юзеров с мобильных устройств.

clampson 17.08.2013 21:49

Цитата:

Сообщение от danik.js (Сообщение 267971)
И это очень хреново. Особенно хреново для юзеров с мобильных устройств.

Идеология сайта(не мой) для которого я писал этот скрипт, подразумевает такое обращение с изображениями, было бы глупо собирать все изображения и делать для них превью, затем редактировать каждую статью что бы их туда вставить. К тому же переучивать контентщиков как надо делать а как не надо, да и самому мне это не упало. А насчёт мобильных устройств, согласен, но большинство из них либо жмут всё через какую нибудь оперу мини, либо если это какой нибудь айфон - обладают вифи модулем и докучи безлимитным тарифным планом поскольку жрут прилично трафика и без картинок, всякими пушами итп. Сори за офтоп.

danik.js 17.08.2013 22:29

Есть плагины же готовые для cms-ок или wysiwyg-редакторов. Сами делают превьюшки при загрузке картинок. А про безлимитки у сотовых операторов я впервые слышу. Вайфай опять же не везде есть. Еще говорят гугл бот замеряет объем страницы и это сказывается на ранжировании (хотя я сомневаюсь в этом)


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