3D Gallery

  • Автор темы Автор темы Wiz
  • Дата начала Дата начала

Wiz

Путник
Участник
Сообщения
32
Розыгрыши
0
Репутация
27
Реакции
9
Баллы
53
Всем привет! Помогите компетентные, кто в курсе как заставить 3D панораму подгружаться сразу.

Пример если я иду в объект напрямую через страницу - она работает и подгружается сразу.

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

Wiz, при переходе Главная -> Проекты -> 'Какой-то проект', страница загружается с таким разметкой
HTML:
<div style="height: 0px; width: 0px; overflow: hidden; position: relative;">
    <img src="/images/cms/data/projects/designing/object-gragdanskoi-oborony/32a.jpg" id="product1" style="max-width: 100%; position: relative; top: 0px; left: 0px; cursor: all-scroll;">
</div>

Если обновить страницу
HTML:
<div style="height: 445px; width: 791px; overflow: hidden; position: relative;">
    <img src="/images/cms/data/projects/designing/object-gragdanskoi-oborony/32a.jpg" id="product1" style="max-width: 100%; position: relative; top: 0px; left: 0px; cursor: all-scroll;">
</div>

проблема может быть либо в кривом плагине jQuery.threesixty, либо в неправильной его настройке
jquery.threesixty.js:
1662294196081.png

начните с отладки var pic = $(this);, что это за элемент и почему его ширина/высота при первом переходе на страницу равны 0
возможно у родительского элемента проблемы с высотой/шириной

Видел подобный плагин у Spectre css
 
  • Мне нравится
Реакции: Wiz
òbi, Спасибо, за наводку, буду смотреть.

òbi, Плагин у spectre css работает корректно, так как полностью на чистом css, не совсем то, что нужно для нашего решения. Jquery.threesixty.js: наш плагин считывает размеры с картинки. Пока не удалось разрешить проблему(.
 
Wiz, попробуйте так
CSS:
#product1 {
    display:block;
    width:100%;
    height:auto;
}
 
  • Мне нравится
Реакции: Wiz
Если придерживаться именно того же подхода, то div`у задавать конкретные размеры нужно уже после того, как картинки загружены, а именно внутри:
JavaScript:
if (totalProgress == options.images.length-1)
 
  • Мне нравится
Реакции: Wiz
Если придерживаться именно того же подхода, то div`у задавать конкретные размеры нужно уже после того, как картинки загружены, а именно внутри:
JavaScript:
if (totalProgress == options.images.length-1)
JavaScript:
        $.each(options.images, function(index, record) {
            var o =$("<img>").attr("src",record).load(function() {
                if (index>pic.data("tempIndex"))
                {
                    pic.data("tempIndex", index)
                    pic.attr("src", $(this).attr("src"))
                }   

                var progress = pic.parent().find(".progressBar");
                totalProgress++;
                var maxsize = pic.parent().find(".progressBg").width();
                var newWidth = (totalProgress/options.images.length)*maxsize;
                progress.stop(true,true).animate({width:newWidth},250);
                if (totalProgress == options.images.length-1)
                {    loaded=true;
                    pic.parent().find(".overlay, .progressBar, .progressBg").remove();
                }
            });
            cache.push(o);
        });

    })

Wiz, попробуйте так
CSS:
#product1 {
    display:block;
    width:100%;
    height:auto;
}
Слишком просто), не работает, к сожалению.
 
Размер блока задается исходя из размера первого изображения в массиве, скорее всего изображение просто не успевает прогрузится, чтобы можно было получить его размер. Даже если точку останова поставить и продолжить, то все прогружается. Ну это так на вскидку, без доступа к коду особо нечего дебажить.

то, панорама срабатывает только после перезагрузки страницы внутри объекта.
В подтверждение моих слов, обнови страницу через ctrl+f5 панорама так же не грузится.
 
  • Мне нравится
Реакции: Wiz
Размер блока задается исходя из размера первого изображения в массиве, скорее всего изображение просто не успевает прогрузится, чтобы можно было получить его размер. Даже если точку останова поставить и продолжить, то все прогружается. Ну это так на вскидку, без доступа к коду особо нечего дебажить.


В подтверждение моих слов, обнови страницу через ctrl+f5 панорама так же не грузится.
Через ctrl+f5 со второго раза заводиться.
 
Через ctrl+f5 со второго раза заводиться.
Это все просто случайность, иногда скрипт выполняется чуть позже и изображение успевает загрузится, в общем такой подход неправильный, скрипт должен выполняться только тогда когда изображение загружено, по сути нужно найти изображение которое задает размер, повесть на него событие image.onload по выполнению которого запустить инициализацию

 
Это все просто случайность, иногда скрипт выполняется чуть позже и изображение успевает загрузится, в общем такой подход неправильный, скрипт должен выполняться только тогда когда изображение загружено, по сути нужно найти изображение которое задает размер, повесть на него событие image.onload по выполнению которого запустить инициализацию

Да, тоже заметил, что просто случайность.
 
Wiz, ну как вариант (не самый лучший) закостылить путем отложенного выполнение инициализации галереи

custom.js:
JavaScript:
    ...
    refreshComponents: function () {
        ...
        setTimeout(() => { ddGallery.init(); }, 1000);
    },
    ...
 
Всем спасибо, за попытки помочь. Мой вопрос разрешил L2Banners за что ему большое спасибо!
 
Там было много повторов, поэтому я вынес все в одну функцию, в которую просто передаются целевые селекторы как и раньше, ну и прокомментировал все, чтобы было понятно. Проблема та что я и говорил, изображение не успевало загрузиться. Хвастаться нечем, логику не менял, на скорую руку как-то так:
 

Вложения

  • js.jpg
    js.jpg
    251,8 КБ · Просмотры: 18
Назад
Сверху Снизу