24.07.2015, 22:07
|
Аспирант
|
|
Регистрация: 12.11.2014
Сообщений: 84
|
|
Помогите адаптировать скрипт к аякс-обновлению страницы
Есть скрипт коллажа, которые работает при обычной загрузке страницы
$(window).load(function () {
collage();
});
function collage() {
$('.Collage').collagePlus(
{
'fadeSpeed' : 2000,
'targetHeight' : 300,
'allowPartialLastRow' : true,
});
}
var resizeTimer = null;
$(window).bind('resize', function() {
$('.Collage img').css("opacity", 0);
if (resizeTimer) clearTimeout(resizeTimer);
resizeTimer = setTimeout(collage, 200);
});
но, этот скрипт перестает работать при аякс-перезагрузке данных на странице.
автор расширения PHPBB3 сделал FAQ и описание, "Как подружить это расширение с другим?" http://www.phpbbguru.net/community/topic44157.html
Т.е. надо встроить имеющийся скрипт в следующую обертку...
Цитата:
|
Шаблон фикса, согласно FAQ по ссылке:
Если какое-то расширение добавляет JavaScript-функционал для сообщений, то этот функционал нужно обернуть в функцию:
function FUNCTION_NAME(e, elements) {
// Код функции.
}
После этого добавить:
$(document).ready(function (e) {
FUNCTION_NAME(e, $(document));
});
$('#qr_posts').on('qr_loaded', FUNCTION_NAME);
Если JavaScript-функционал добавляется для содержимого сообщений (например, текста или картинок), то после этого нужно также добавить (возможно, в доработанном виде):
$('#qr_postform').on('ajax_submit_preview', function (e) {
FUNCTION_NAME(e, $('#preview'));
});
|
С более простым скриптом я разобрался самостоятельно, с этим, простой оберткой
$('#qr_posts').on('qr_loaded', function (e, elements) {
collage();
});
дело не обошлось, надо как-то заворачивать тот код, что $(window).bind...
самостоятельно справиться не могу, прошу помощи.
|
|
24.07.2015, 22:46
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,121
|
|
alecto, загрузили данные запустили collage() и всё
|
|
24.07.2015, 22:54
|
Аспирант
|
|
Регистрация: 12.11.2014
Сообщений: 84
|
|
$(window).load(function () {
collage();
});
function collage() {
$('.Collage').collagePlus(
{
'fadeSpeed' : 2000,
'targetHeight' : 300,
'allowPartialLastRow' : true,
});
}
var resizeTimer = null;
$(window).bind('resize', function() {
$('.Collage img').css("opacity", 0);
if (resizeTimer) clearTimeout(resizeTimer);
resizeTimer = setTimeout(collage, 200);
});
$('#qr_posts').on('qr_loaded', function (e, elements) {
collage();
});
так не работает.
или я не понимаю, что надо делать.
Последний раз редактировалось alecto, 24.07.2015 в 23:17.
|
|
24.07.2015, 23:36
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,121
|
|
alecto,
$.ajax({
url: '......',
success: function(){
.... сюда collage(); }
});
|
|
24.07.2015, 23:39
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,121
|
|
alecto,
после ajax пробовали изменить экран? работает collagePlus или нет?
|
|
24.07.2015, 23:51
|
Аспирант
|
|
Регистрация: 12.11.2014
Сообщений: 84
|
|
по привиденному мной коду: после аякса изображения не отображаются, реакции на изменение размера нет.
вот пример: заходите через вторую страницу, затем аяксом переходите на первую.
http://motobratva.com/viewtopic.php?...=5142&start=10
коллаж в первом сообщении под картинкой.
если нажать F5 на первой странице - коллаж будет виден.
если же не добавлять код
$('#qr_posts').on('qr_loaded', function (e, elements) {
collage();
});
то при всех тех же действиях (с 2 страницы на 1) и изменении размера окна - картинки появляются.
вмешаться в работу расширения не получится, т.е. адаптировать под аякс придется ту часть, которая доступна мне, т.е. скрипт включения колллажа.
по вашему коду постом выше - простите великодушно, вообще ничего не понял.
Последний раз редактировалось alecto, 24.07.2015 в 23:55.
|
|
25.07.2015, 00:09
|
Аспирант
|
|
Регистрация: 12.11.2014
Сообщений: 84
|
|
приведу для примеру:
был работающий код, который переставал работать при смене страниц аяксом
$(document).ready(function() {
var scr_w = $(this).width();
var scr_h = $(this).height();
if (scr_w > 800 && scr_h > 600) {
$("dl.thumbnail a").addClass("highslide").attr("onclick", "return hs.expand(this)");
}
});
после доработки согласно инструкции автора до такого вида - все работает.
function HighSlideAttachments(e, elements) {
var scr_w = $(this).width();
var scr_h = $(this).height();
if (scr_w > 800 && scr_h > 600) {
$("dl.thumbnail a").addClass("highslide").attr("onclick", "return hs.expand(this)");
}
}
$(document).ready(function (e) {
HighSlideAttachments(e, $(document));
});
$('#qr_posts').on('qr_loaded', HighSlideAttachments);
приведенный выше код коллажа, поидее, можно исправить аналогичным образом, но он более сложен для меня и, вроде бы должен работать, но никак не хочет.
Последний раз редактировалось alecto, 25.07.2015 в 00:12.
|
|
25.07.2015, 00:22
|
Аспирант
|
|
Регистрация: 12.11.2014
Сообщений: 84
|
|
на всякий случай попробовал вот такой вариант - тоже безрезультатно
function collage() {
$('.Collage').collagePlus(
{
'fadeSpeed' : 2000,
'targetHeight' : 300,
'allowPartialLastRow' : true,
});
}
var resizeTimer = null;
$(window).bind('resize', function() {
$('.Collage img').css("opacity", 0);
if (resizeTimer) clearTimeout(resizeTimer);
resizeTimer = setTimeout(collage, 200);
});
function CollageOnAjaxPage(e, elements) {
collage();
}
$(document).ready(function (e) {
CollageOnAjaxPage(e, $(document));
});
$('#qr_posts').on('qr_loaded', CollageOnAjaxPage);
|
|
25.07.2015, 01:07
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,121
|
|
Сообщение от alecto
|
этот скрипт перестает работать при аякс-перезагрузке данных на странице.
|
что такое скрипт перестаёт работать и что такое аякс-перезагрузка данных -- неосилил - помочь не могу извини.
вариант на последок пальцем в небо
$('#qr_posts').on('qr_loaded', $(window).resize);
для меня слишком сложно что вы творите
Сообщение от alecto
|
attr("onclick", "return hs.expand(this)");
|
|
|
25.07.2015, 08:17
|
Аспирант
|
|
Регистрация: 12.11.2014
Сообщений: 84
|
|
спасибо за попытку помочь.
|
|
|
|