iScroll: скрыть полосу прокрутки, когда индикатор скрыт

#javascript #css #iscroll #iscrollview

#javascript #css #iscroll #iscrollview

Вопрос:

У меня есть горизонтальный экземпляр iScroll, который имеет интерактивную полосу прокрутки.

     myScroll = new IScroll('#wrapper', { 
        scrollX: true, 
        scrollY: false, 
        mouseWheel: false,
        scrollbars: 'custom',
        interactiveScrollbars: true,
        resizeScrollbars: false,
        bindToWrapper: false,
        click: true,
        fadeScrollbars: true,
    });
  

Я хочу, чтобы его полосы прокрутки скрывались, когда iScroll делает индикатор скрытым ( display: none )
Я заметил, что это изменяет свойство css display индикатора, когда обнаруживает, что прокрутка не нужна из-за отсутствия слайдов / элементов для прокрутки.

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

fadeScrollbars это не совсем то, что я хотел, потому что это скрывает полосу прокрутки и индикатор, даже если прокрутка все еще разрешена.

Как мне настроить iScroll так, чтобы не отображать полосу прокрутки, если индикатор скрыт?

Есть ли какой-либо обходной путь для этого?

Комментарии:

1. У меня было бы решение для AngularJS. Заинтересованы?

Ответ №1:

Этот вопрос был добавлен давным-давно, но я решил это, добавив некоторый дополнительный код в библиотеку — В версии 5.1.3 я нашел метод refresh, где в начале приведены некоторые «if conditions»:

 if ( this.options.listenX amp;amp; !this.options.listenY ) {
        this.indicatorStyle.display = this.scroller.hasHorizontalScroll ? 'block' : 'none';
    } else if ( this.options.listenY amp;amp; !this.options.listenX ) {
        this.indicatorStyle.display = this.scroller.hasVerticalScroll ? 'block' : 'none';
    } else {
        this.indicatorStyle.display = this.scroller.hasHorizontalScroll || this.scroller.hasVerticalScroll ? 'block' : 'none';
    }
  

измените на

 if ( this.options.listenX amp;amp; !this.options.listenY ) {
        this.indicatorStyle.display = this.scroller.hasHorizontalScroll ? 'block' : 'none';
        this.wrapper.style.display = this.scroller.hasHorizontalScroll ? 'block' : 'none';
    } else if ( this.options.listenY amp;amp; !this.options.listenX ) {
        this.indicatorStyle.display = this.scroller.hasVerticalScroll ? 'block' : 'none';
        this.wrapper.style.display = this.scroller.hasVerticalScroll ? 'block' : 'none';
    } else {
        this.indicatorStyle.display = this.scroller.hasHorizontalScroll || this.scroller.hasVerticalScroll ? 'block' : 'none';
        this.wrapper.style.display = this.scroller.hasHorizontalScroll || this.scroller.hasVerticalScroll ? 'block' : 'none';
    }
  

Ответ №2:

Существует обходной путь с использованием jQuery (просто проверьте, скрыт ли индикатор, и скройте полосу прокрутки):

 if($('#wrapper .iScrollIndicator').is(':hidden')) {
    $('#wrapper .iScrollVerticalScrollbar').hide();
}
  

Ответ №3:

Ты хочешь вот так? Добавьте hideScrollbars: true в свой код

 myScroll = new IScroll('#wrapper', {  
        hideScrollbars: true,
        listenX: true,
        scrollX: true, 
        scrollY: false, 
        mouseWheel: false,
        scrollbars: 'custom',
        interactiveScrollbars: true,
        resizeScrollbars: false,
        bindToWrapper: false,
        click: true,
        fadeScrollbars: true,
    });