Javascript-форум (https://javascript.ru/forum/)
-   Opera, Safari и др. (https://javascript.ru/forum/css-html-browser/)
-   -   Невыполнение скрипта для уже загруженных картинок в опере (https://javascript.ru/forum/css-html-browser/30113-nevypolnenie-skripta-dlya-uzhe-zagruzhennykh-kartinok-v-opere.html)

Acreator57887 24.07.2012 17:12

Невыполнение скрипта для уже загруженных картинок в опере
 
У меня есть скрипт, который уменьшает изображения и позиционирует их для получения "первью" или демо-картинок.

Выполняется он так:
var $img = $('.demophoto');
$img.load(function (){
// Сам скрипт
});


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

Я где-то читал, что эту проблему можно решить trigger-ом, но как? я не понял даже после прочтения инструкции по триггеру. Помогите разобраться))

Весь скрипт

devote 24.07.2012 17:16

$('.demophoto').each(function() {
    var load = function() {
        // Сам скрипт
    }
    if ( this.complete ) {
        load.call( this );
    } else {
        $( this ).load( load );
    }
});

Acreator57887 25.07.2012 09:28

Только хуже стало. В опере осталось по прежнему, а в других браузерах стало глюкать - иногда скрипт не выполняется.
Например в хроме скрипт выполняется после обновления страницы.

devote 25.07.2012 10:39

$('.demophoto').each(function() {
    var img = new Image();
    img.onload = function() {
        // Сам скрипт
    }
    img.src = this.src;
});

Acreator57887 25.07.2012 11:14

devote,

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

Если всё заработает - отпишусь.

Acreator57887 25.07.2012 11:29

Да, проблема была именно в скрипте, что уменьшал изображения. Я его упростил, исправил + ваша конструкция - всё работает.

Спасибо))

P.S. Ссылка на весь скрипт осталась прежней - она есть в моём первом сообщении.

Acreator57887 25.07.2012 18:50

Не совсем проблема решилась... :(

Ваша конструкция работает, но не работает внутри неё var imgs = $(this);
А нужно именно this, так как картинок много и все разные.

Deff 25.07.2012 18:53

Acreator57887,
Заушно можно долго искать правды жизни (Напоминает лечение зубов по фотографии
Создайте тест с боль-мень рабочим скриптом - выложите ссылку

Acreator57887 25.07.2012 19:46

var $img = $('.demophoto');

$img.load(function (){
var CurImg = $(this);

CurImg.removeAttr("width");
CurImg.removeAttr("height");

var width = CurImg.width();
var height = CurImg.height();

if (width > height) {
CurImg.css('height', 180);
} else {
CurImg.css('width', 180);
};

var width_e = CurImg.width();
var height_e = CurImg.height();

if (width_e > 180) {
var rig = (width_e-180)/2;
CurImg.css('right', rig);
} else {
var bot = (height_e-180)/2;
CurImg.css('bottom', bot);
};

CurImg.css('display', block);
});


http://test-0-1.ucoz.ru/photo

Deff 25.07.2012 20:03

Acreator57887,
Если не секрет - что скрипт делает ?


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