2012-06-11 2 views
0

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

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

Я первый попытался с помощью JavaScript с этой страницы (JScrollPaneDynamicHeight) для достижения динамической высоты и этот метод:

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

... вызывается методами показать/скрыть, чтобы вызвать метод Повторная инициализация() и позволяют динамический контент.

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

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

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

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

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

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

Приветствия,

Скотт

+0

Не могли бы вы разместить [самодостаточный пример] (http://sscce.org/)? Ваши идеи звучат так, как будто они действительны, но похоже, что вы справляетесь с реализацией. – RustyTheBoyRobot

ответ

0

я написал приемлемый ВОЗМОЖНОЕ РЕШЕНИЕ благодаря ответ я нашел here.

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

А хорошо. Вот как это работает:

-Каждый 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); 

}); 
0

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

function resizedw() { 
     $.each($('.scroll-pane'), function() { 
      var api = $(this).data('jsp'); 
      api.reinitialise(); 
     }); 
} 
var doit; 
window.onresize = function() { 
    clearTimeout(doit); 
    doit = setTimeout(resizedw, 100); 
}; 
Смежные вопросы