Řešení? Použití :hover zredukovat pouze na nedůležité kosmetické efekty.
Ale co když už máme něco komplikovanějšího s :hover hotové a úplně to předělat nelze? Našel jsem řešení mimo jiné v textu What's the best way to detect a 'touch screen' device using JavaScript?:
Pomocí jednoduché funkce v js detekujeme dotykovou obrazovku. Nastavíme řídící class, podle kterého upravíme reakci na :hover v CSS. Rozbalení menu či roletky, které reagovalo dříve na :hover, nastane i po přidání classu pomocí další funkce v js (jQuery).Následující ukázka je i po zjednodušení doufám dostatečně jasná.
JS (jQuery):
function is_touch_device() {
try {
return 'ontouchstart' in window
|| 'onmsgesturechange' in window;
} catch (e) {
return false;
}
};
$(document).ready(function(){
/* touch screen? */
$('body').toggleClass(function() {
if ( is_touch_device() ) {
return 'touch';
} else {
return 'desktop';
}
});
/* dropdown switch */
$('body:not(.desktop) .switch').click(function() {
var s = $(this).closest('.switch');
if ( s.is('.open') ) {
s.removeClass('open');
} else {
s.addClass('open');
return false;
}
});
});
CSS:
.switch .dropdown {visibility: hidden;}
.switch.open .dropdown,
body.desktop .switch:hover .dropdown {visibility: visible;}
HTML:
<span class="switch">
<strong>Title</strong>
<span class="dropdown">
...values...
</span>
</span>
[touch screen, dotyková obrazovka, dotykový display, hover efekt]
Žádné komentáře:
Okomentovat