2015-05-15 4 views
0

У меня есть прокручиваемый список и вы хотите показывать полосу прокрутки только с помощью наведения, но я также хочу иметь возможность прокручивать по первый штрих в списке на мобильных браузерах (iOS, Android) - поведение, подобное списку всегда имеет overflow-y: auto. Я пытаюсь использовать этот код (http://codepen.io/sergdenisov/pen/RPazyg):Показать полосу прокрутки только на hover

HTML:

<ul class="list js-list"> 
    <li>Test Test Test Test Test Test Test Test Test</li> 
    ... 
    <li>Test Test Test Test Test Test Test Test Test</li> 
</ul> 

CSS:

.list { 
    -webkit-overflow-scrolling: touch; 
    padding: 0 30px 0 0; 
    overflow: hidden; 
    height: 300px; 
    width: 300px; 
    background: gray; 
    list-style: none; 
} 

    .list_scrollable { 
     overflow-y: auto; 
    } 

Javascript:

$('.js-list').on({ 
    'mouseenter touchstart': function() { 
     $(this).addClass('list_scrollable'); 
    }, 
    'mouseleave touchend': function() { 
     $(this).removeClass('list_scrollable'); 
    } 
}); 

Но функция прокрутки в мобильных браузерах активируется только при повторном нажатии на список перед прокруткой. Есть идеи?

+0

попробуйте 'mouseover' вместо' mouseenter' – Vinc199789

+2

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

+0

Помните, что ** ВСЕ ** код презентации (HTML, CSS, JS) являются ** предложениями только **. Браузер или достаточно опытный пользователь могут игнорировать любое ваше форматирование. Как сказал @NiettheDarkAbsol, какое значение это добавляет вашему пользователю? Если вы не можете ответить на этот вопрос, не делайте этого. – BryanH

ответ

0

Помните, что на устройстве iOS overflow-y должно быть scroll.

$(".list").on("touchstart touchend", function(){ 
 
    $(this).toggleClass("scroll"); 
 
})
.list { 
 
    -webkit-overflow-scrolling: touch; 
 
    padding: 0 30px 0 0; 
 
    overflow: hidden; 
 
    height: 300px; 
 
    width: 300px; 
 
    background: gray; 
 
    list-style: none; 
 
} 
 

 
.list { 
 
    /* Your CSS */ 
 
    overflow: hidden; 
 
} 
 
.list > li { 
 
    max-width: 100%; 
 
} 
 
.list:active, .list:focus, .list:hover, .list.scroll { 
 
    overflow-y: scroll; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<ul class="list js-list"> 
 
    <li>Test Test Test Test Test Test Test Test Test</li> 
 
    <li>Test Test Test Test Test Test Test Test Test</li> 
 
    <li>Test Test Test Test Test Test Test Test Test</li> 
 
    <li>Test Test Test Test Test Test Test Test Test</li> 
 
    <li>Test Test Test Test Test Test Test Test Test</li> 
 
    <li>Test Test Test Test Test Test Test Test Test</li> 
 
    <li>Test Test Test Test Test Test Test Test Test</li> 
 
    <li>Test Test Test Test Test Test Test Test Test</li> 
 
    <li>Test Test Test Test Test Test Test Test Test</li> 
 
    <li>Test Test Test Test Test Test Test Test Test</li> 
 
    <li>Test Test Test Test Test Test Test Test Test</li> 
 
    <li>Test Test Test Test Test Test Test Test Test</li> 
 
    <li>Test Test Test Test Test Test Test Test Test</li> 
 
    <li>Test Test Test Test Test Test Test Test Test</li> 
 
    <li>Test Test Test Test Test Test Test Test Test</li> 
 
    <li>Test Test Test Test Test Test Test Test Test</li> 
 
    <li>Test Test Test Test Test Test Test Test Test</li> 
 
    <li>Test Test Test Test Test Test Test Test Test</li> 
 
    <li>Test Test Test Test Test Test Test Test Test</li> 
 
    <li>Test Test Test Test Test Test Test Test Test</li> 
 
    <li>Test Test Test Test Test Test Test Test Test</li> 
 
    <li>Test Test Test Test Test Test Test Test Test</li> 
 
    <li>Test Test Test Test Test Test Test Test Test</li> 
 
    <li>Test Test Test Test Test Test Test Test Test</li> 
 
    <li>Test Test Test Test Test Test Test Test Test</li> 
 
    <li>Test Test Test Test Test Test Test Test Test</li> 
 
    <li>Test Test Test Test Test Test Test Test Test</li> 
 
</ul>

+0

Вы попробовали? Он не работает в Safari iOS - прокрутка заблокирована, http://codepen.io/sergdenisov/full/vOGomj/. –

+0

Вы можете изменить 'overflow-y' на' scroll'. Это что-то известно как ошибка в iOS. Или для лучшего результата просто дайте 'overflow' не' overflow-y' и установите '.list> li'' max-width' в '100%' –

+0

Добавьте пример рабочего кода на http://jsfiddle.net, пожалуйста. –

1

Я хотел бы предложить вам просто добавить

.list_scrollable { 
     overflow-y: auto; 
    } 

в качестве медиа-запроса для мобильных телефонов - таким образом, делая это всегда верно. Или измените свой CSS, как предложили другие ответы, сделав ваш JS-код устаревшим.

+0

Хотя я не согласен с практикой скрытия прокрутки таким образом, этот ответ - очень хороший способ справиться с этим. –

+0

Что такое медиа-запрос для мобильных телефонов? Он основан только на ширине экрана? Этого не достаточно. Я могу получить ширину экрана = 1024 пикселя на iPad в альбомной ориентации, это также ширина экрана рабочего стола. –

+0

@ Исходное решение CSS из другого ответа не работает. –