JScrollPane с динамической высотой и динамическим содержимым?

Я разрабатываю Java-сервлет, который генерирует веб-страницы с div, содержащим результаты поиска в базе данных.

Высота этого div определяется в процентах (динамическая высота), а содержимое имеет кнопки отображения/скрытия (динамическое содержимое). Функции отображения и скрытия активируются атрибутом «onclick» элемента div.

Сначала я попытался использовать javascript с этой страницы (JScrollPaneDynamicHeight) для достижения динамической высоты и этого метода:

function refreshNav() {  
var pane = $('YOUR SELECTOR');  
var api = pane.data('jsp');  
api.reinitialise();  
}

...вызывается методами show/hide, чтобы вызвать метод reinitialise() и разрешить динамическое содержимое.

Это не работало правильно - при некоторых щелчках это срабатывало, при других щелчках панель прокрутки исчезала, а не появлялась снова, и наоборот.

Я также попытался сделать переменную «api» глобальной — та же проблема.

Последнее, что я пробовал, используя js, нашел здесь (только без добавления абзацев). Существует компромисс между быстрым откликом и активностью процессора, поэтому я добавил оператор if, который проверяет логическое значение, описывающее, изменилось ли содержимое или высота. Я использовал «console.log()», чтобы убедиться, что все работает как надо (изменение логического значения, выполнение оператора if и т. д.).

Это... но у меня все та же проблема с JScrollPane.

Однажды я где-то читал, что использование атрибута html "onclick" является плохой практикой - может ли это иметь значение?

Я был бы очень признателен за любую идею о том, что может пойти не так.

Ваше здоровье,

Скотт


person Scott    schedule 11.06.2012    source источник
comment
Не могли бы вы опубликовать самостоятельный пример? Ваши идеи звучат так, как будто они верны, но похоже, что вы сбиты с толку реализацией.   -  person RustyTheBoyRobot    schedule 11.06.2012


Ответы (2)


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

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

Ах хорошо. Это работает следующим образом:

-каждые 75 миллисекунд высота окна и высота контейнера проверяются на наличие изменений -если это так, полоса прокрутки настроена на повторную инициализацию через 100 миллисекунд -если что-то продолжает изменяться, тогда команда повторной инициализации снова сбрасывается до 100

$(document).ready(function(){

var windowHeight = $(window).height();
var containerHeight = $('#container').height();
var resized;

setInterval(function(){

    if(windowHeight!=$(window).height() || containerHeight!=$('#container').height())
    {
        clearTimeout(resized);
        resized = setTimeout(function(){api.reinitialise();}, 100);
    }

    windowHeight = $(window).height();
    containerHeight = $('#container').height();

},75);

});
person Scott    schedule 20.06.2012

Я также использовал сценарий Марка Коулмана (спасибо, Марк!), и он работает.

function resizedw() {
        $.each($('.scroll-pane'), function () {
            var api = $(this).data('jsp');
            api.reinitialise();
        });
}
var doit;
window.onresize = function () {
    clearTimeout(doit);
    doit = setTimeout(resizedw, 100);
};
person extremeandy    schedule 19.06.2015