Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   динамическое обновление картинки (рисуемой) (https://javascript.ru/forum/misc/21508-dinamicheskoe-obnovlenie-kartinki-risuemojj.html)

Lottarend 13.09.2011 08:13

динамическое обновление картинки (рисуемой)
 
У меня есть картинка, которую я рисую с помощью asp.net. Это фон дива, который я обновляю по движению мыши... что-то вроде карты, в общем.
function mouseup(e) {
            var scroll = getScrollXY();
            c = e.clientX+scroll[0];
            d = e.clientY+scroll[1];
            document.getElementById("dda").style.backgroundImage = "url(WebForm2.aspx?Координаты=" + a + "_" + b + "/" + c + "_" + d + "&Параметры=/Координаты" + ")";            
        }

Так вот. Картинка эта рисуется секунду с чем-то, и безбожно мигает во время загрузки, что очень не приятно. Можно как-то сделать, чтобы предыдущая картинка сохранялась, пока изображение полностью не прорисуется?

Lottarend 13.09.2011 09:27

Прочитал про кэширование изображения. Попытался сделать так.
var im = new Image();
im.src="WebForm2.aspx?Координаты=" + a + "_" + b + "/" + c + "_" + d + "&Параметры=/Координаты" + "";   
document.getElementById("dda").style.backgroundImage = im.src;

До этого поэкспериментировал с картинкой, смена изображения работает корректно. Что не так? Почему у div'а не меняется фон?
...

Гм, попытка 3.
var im = new Image();
im.src="WebForm2.aspx?Координаты=" + a + "_" + b + "/" + c + "_" + d + "&Параметры=/Координаты" + "";            
document.getElementById("dda").style.backgroundImage = "url("+im.src+")";

Заработало, но почему-то, в отличие от аналогичных действий с img, мигание никуда не делось.

Gozar 13.09.2011 11:05

Если честно, то не совсем ясно что вы делаете. Если я правильно понял, то вы не загрузили изображение, т.е. не закэшировали его до начала смены картинки.

Подгрузка кэшированных изображений должна происходить до начала выполнения смены.

Сначала грузим, потом вызываем, а не вместе.

Ps:
var im = new Image();
im.onload = function () {
document.getElementById("dda").style.backgroundImage = "url("+im.src+")";
}
im.src="WebForm2.aspx?Координаты=" + a + "_" + b + "/" + c + "_" + d + "&Параметры=/Координаты" + "";

Kolyaj 13.09.2011 11:48

Цитата:

Сообщение от Lottarend
У меня есть картинка, которую я рисую с помощью asp.net. Это фон дива, который я обновляю по движению мыши...

Интересно, на каком количестве посетителей сервер загнётся?

Lottarend 13.09.2011 12:49

Gozar, о, точно, спасибо, заработало. Это мигание изрядно раздражало -_-
Kolyaj, а это так ресурсозатратно? Гм... ну, вы бы что предложили?

Kolyaj 13.09.2011 13:21

Если картинка генерируется секунду с чем-то, как думаете, это затратно или нет?
Да и вы, наверное, сейчас на локалхосте тестируете и не учитываете сетевые задержки.

Lottarend 13.09.2011 13:28

Угу. Не учитываю, да. Секунда - это максимум, что получилось выжать с GDI++. Мне просто не понятно, какой здесь еще подход можно применить. Карта так и так динамическая, а при масштабировании еще и полный перерасчет делается.

Kolyaj 13.09.2011 13:36

Цитата:

Сообщение от Lottarend
Мне просто не понятно, какой здесь еще подход можно применить.

Мы же не знаем, что вы делаете. Но если вы будете на mousemove каждого юзера генерировать новую картинку, то, во-первых, у каждого юзера будут жуткие тормоза, во-вторых, при некотором маленьком количестве юзеров ваш сервер просто умрёт.

Lottarend 13.09.2011 13:50

Ясно. Спасибо за инфу.


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