Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.08.2017, 17:00
Аспирант
Отправить личное сообщение для sergey24 Посмотреть профиль Найти все сообщения от sergey24
 
Регистрация: 04.11.2016
Сообщений: 56

Проблемы с реинициализацией jscrollpane
Добрый день. Есть сайт, который использует jscrollpane. Для работы данного плагина требуется добавить class к блоку в котором хотим заменить скролл. Если его ставить изначально в html код, то всё работает отлично. Но у меня он присваивается после загрузки страницы, т.к. требуется присваивать разным блокам в зависимости от размера экрана, после чего отказывается работать (из-за кривых рук). Собственно вот сам код:
<div class="block1">123
456
789</div>
<div class="block2">123
456
789</div>
<div class="block2">123
456
789</div>

$(document).ready(function() {
    $('.scroll-pane2').jScrollPane({
         autoReinitialise: true
  });
$(function() {
			doUseful();
			$(window).resize(doUseful);
		});

		function doUseful() {
			var width = $('body').innerWidth();
			var element2 = $('.scroll-pane2').jScrollPane();
			var api2 = element2.data('jsp');
			if (width < 1200) {
			$('.block1').removeClass('scroll-pane2');
			$('.block2').addClass('scroll-pane2');
			api2.reinitialise();
			}
			else {
			$('.block1').addClass('scroll-pane2');
			$('.block2').removeClass('scroll-pane2');
			api2.reinitialise();
			}
		}

PS Использую scroll-pane2, т.к. scroll-pane уже есть на странице и используется в других блоках
К слову вот его код:
function explode(){
        var element = $('.scroll-pane').jScrollPane();
	var api = element.data('jsp');
	api.scrollToBottom();
}
setTimeout(explode, 500);

Этот код работает отлично

Последний раз редактировалось sergey24, 25.08.2017 в 17:08.
Ответить с цитированием
  #2 (permalink)  
Старый 25.08.2017, 17:28
Аспирант
Отправить личное сообщение для sergey24 Посмотреть профиль Найти все сообщения от sergey24
 
Регистрация: 04.11.2016
Сообщений: 56

Заменил код на этот:
<script>
		$(document).ready(function() {
			$(function() {
				doUseful();
				$(window).resize(doUseful);
			});

			function doUseful() {
				var width = $('body').innerWidth();
				var element2 = $('.scroll-pane2').jScrollPane();
				var api2 = element2.data('jsp');
				if (width < 899) {
				$('.block1').removeClass('scroll-pane2');
				$('.block2').addClass('scroll-pane2');
				}
				else {
				$('.block1').addClass('scroll-pane2');
				$('.block2').removeClass('scroll-pane2');
				}
			}
		});
	</script>

При загрузке class присваивается, но начинает работать (создаются блоки и тд) только после изменения размера экрана.
<script>
		$(document).ready(function() {
				doUseful();
			$(function() {
				doUseful();
				$(window).resize(doUseful);
			});

			function doUseful() {
				var width = $('body').innerWidth();
				var element2 = $('.scroll-pane2').jScrollPane();
				var api2 = element2.data('jsp');
				if (width < 1200) {
				$('.block1').removeClass('scroll-pane2');
				$('.block2').addClass('scroll-pane2');
				}
				else {
				$('.block1').addClass('scroll-pane2');
				$('.block2').removeClass('scroll-pane2');
				}
			}
		});
	</script>

А вот этот код присвает class, создаёт все нужные блоки, но не листается. Скролл начинает работать только после изменения размера экрана.
Так же проблема в том, что если открыть браузер с шириной 1300px и сузить до 1100px, то скролл остаётся у всех блоков.
Ответить с цитированием
  #3 (permalink)  
Старый 25.08.2017, 17:50
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

sergey24,
а так?
<script>
  $(window).on("load", function() {
        doUseful();
        $(window).resize(doUseful);
      });

   function doUseful() {
        var width = $('body').innerWidth();
        var element2 = $('.scroll-pane2').jScrollPane();
        var api2 = element2.data('jsp');
        if (width < 899) {
        $('.block1').removeClass('scroll-pane2');
        $('.block2').addClass('scroll-pane2');
        }
        else {
        $('.block1').addClass('scroll-pane2');
        $('.block2').removeClass('scroll-pane2');
        }
      }

  </script>
Ответить с цитированием
  #4 (permalink)  
Старый 25.08.2017, 18:01
Аспирант
Отправить личное сообщение для sergey24 Посмотреть профиль Найти все сообщения от sergey24
 
Регистрация: 04.11.2016
Сообщений: 56

рони,
Всё равно начинает работать только после изменения размера окна.

Последний раз редактировалось sergey24, 25.08.2017 в 18:07.
Ответить с цитированием
  #5 (permalink)  
Старый 25.08.2017, 18:18
Аспирант
Отправить личное сообщение для sergey24 Посмотреть профиль Найти все сообщения от sergey24
 
Регистрация: 04.11.2016
Сообщений: 56

рони,
В вашем коде нет самого вызова реинициализации или я не прав?
Ответить с цитированием
  #6 (permalink)  
Старый 25.08.2017, 18:36
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

Сообщение от sergey24
В вашем коде нет самого вызова реинициализации или я не прав?
в моём коде есть $(window).on("load", всё остальное ваше, больше идей нет.
Ответить с цитированием
  #7 (permalink)  
Старый 25.08.2017, 18:45
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

попробуйте с костылем заработает или нет

$(window).on("load", function() {
        setTimeout(doUseful,1000);
        $(window).resize(doUseful);
      });

   function doUseful() {
        var width = $('body').innerWidth();
        var element2 = $('.scroll-pane2').jScrollPane();
        var api2 = element2.data('jsp');
        if (width < 899) {
        $('.block1').removeClass('scroll-pane2');
        $('.block2').addClass('scroll-pane2');
        }
        else {
        $('.block1').addClass('scroll-pane2');
        $('.block2').removeClass('scroll-pane2');
        }
      }
Ответить с цитированием
  #8 (permalink)  
Старый 25.08.2017, 18:51
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

а лучше даже вот так

$(function() {
        setTimeout(doUseful,2000);
        $(window).resize(doUseful);
      });

   function doUseful() {
        var width = $('body').innerWidth();
        var element2 = $('.scroll-pane2').jScrollPane();
        var api2 = element2.data('jsp');
        if (width < 899) {
        $('.block1').removeClass('scroll-pane2');
        $('.block2').addClass('scroll-pane2');
        }
        else {
        $('.block1').addClass('scroll-pane2');
        $('.block2').removeClass('scroll-pane2');
        }
      }
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В jScrollPane не работает scrollTop() gam0ra Общие вопросы Javascript 0 25.02.2015 14:23
Проблемы со слайдером. Shupamen Работа 1 15.12.2013 00:12
Тормозит jScrollPane в опере... atlantis Opera, Safari и др. 0 05.03.2013 18:56
Решение проблемы с отображением элементов на странице mozyr Javascript под браузер 17 13.01.2012 02:34
глюк форума Gvozd Сайт Javascript.ru 11 18.03.2009 14:37