2015-04-19 5 views
0

Я пытаюсь реализовать код поляроида галереи this на моей веб-странице. На конкретном сайте я разместил код поляроидной галереи внутри a Slide Out Panel. Я получаю следующее сообщение об ошибке в консоли при поляроиде-галерее код помещается внутри выскользнуть панели:Javascript - переписать анонимную функцию для указанной функции

Uncaught TypeError: Cannot read property 'length' of undefined photostack.js:54 
shuffleMArray photostack.js:325 
moveItems photostack.js:390 
Photostack._shuffle photostack.js:263 
Photostack._showPhoto photostack.js:166 
Photostack._open photostack.js:180 
Photostack._initEvents photostack.js:130 
Photostack._init photostack.js:99 
Photostack (index):431 
(anonymous function) 

Я заметил, что я не получаю эту ошибку в консоли, когда поляроид-галерея код помещается снаружи Панель слайда. (все работает так, как ожидалось)

Я новичок, когда дело доходит до JavaScript, но я понял, что JS, который вызывает галерею polaroid, является анонимными функциями, которые создаются во время выполнения. Кажется, что эта анонимная функция не работает, когда галерея поляроидов находится внутри панели «Слайд-аут», поэтому я думаю, что мне как-то придется переписать анонимные функции на именованную функцию, чтобы получить код для запуска из выпадающего меню Панель. Пожалуйста, исправьте меня, если я ошибаюсь!

Это исходный код: (анонимные функции)

new Photostack(document.getElementById('photostack-3'), { 
     callback : function(item) { 
      console.log(item) 
     } 
    }); 

Это моя названа функция попытка: (не работает - мне нужна помощь!)

function Photostack() 
{ 
    document.getElementById('photostack-3'), { 
    callback : function(item) { 
     console.log(item) 
    } 
} 

Photostack(); 

Спасибо заранее!

+1

Ну, самое первое, что нужно знать, это то, что если вы назовете * свою * функцию «Фотостак», вы * спрячете * имя библиотеки, которую вы пытаетесь использовать. – Pointy

+2

Нет, использование названной функции vs unnamed не является вашей проблемой здесь. И ваша вторая попытка полностью пошла не так. – Bergi

+0

Можете ли вы сделать jsfiddle того, что вы пытаетесь сделать? – forsvunnet

ответ

0

Вы должны использовать это Photostack на контейнерах с ненулевым размером. Элементы, скрытые с display: none, имеют нулевой размер.

Некоторые строки photostack code в исполнении.

строка 410: this.sizes.* установлены на offset*, которые равны нулю для скрытых элементов.
линия 285: columns = Math.ceil(this.sizes.inner.height * ... что 0
линия 299: var grid = [], а затем ничего не добавляется в массив причины линия 325: grid = shuffleMArray(grid);
линия   54: inArrLen = marray[0].length, где marray местное название grid, который [].

([])[0].length(undefined).lengthError!

PS: Вы были бы в состоянии сделать такое исследование самостоятельно, если вы хотите использовать функцию break on errors в dev.tools и ходить вокруг штабеля.

+0

Таким образом, нет возможности подождать, пока определенная панель будет отображаться: блок перед выполнением JS? – R0LL

+0

Вы можете использовать [mutation observer] (https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver) для отслеживания изменений в стилях, но этот метод не работает во всех браузерах. – kirilloid

Смежные вопросы