В настоящее время я разрабатываю частную платформу для использования на устройствах WebKit.Я создал серию представлений списка, к которым я применяю класс hover
, когда пользователь что-то трогает.Вот код jQuery / JavaScript, который я использую для добавления этого, и CSS для соответствующего класса:
$('*').bind('touchstart', function() { $(this).addClass('hover'); }).bind('touchend', function() { $(this).removeClass('hover') });
И CSS:
ul li:hover,
ul li.hover {
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(5,140,245,1)), color-stop(100%,rgba(1,96,230,1)));
background: -webkit-linear-gradient(top, rgba(5,140,245,1) 0%,rgba(1,96,230,1) 100%);
color: #fff
}
ul li:hover a,
ul li.hover a {
background-position: right -38px
}
Это, кажется, работает, как ожидалось, когдапросмотр в Chrome (или в некотором настольном браузере с поддержкой Webkit), за исключением того факта, что если позиция мыши не перемещается между переходами между экранами, элемент списка на новых экранах становится зависшим.Это, очевидно, следовало ожидать, так как псевдокласс :hover
был запущен.
Однако я не ожидал, что такое же поведение произойдет в iPhone Mobile Safari.Вот несколько скриншотов и краткое объяснение сценария.Я нажимаю один раз на элемент списка видов (который является элементом a
внутри li
) и убираю палец с экрана.Новый div
показан с другим списком.Не нажимая ничего на новом div
, который теперь отображается, второй li
имеет класс hover
, хотя я его не трогал ...
Может кто-нибудь помочь мне отладить это или разобраться, почему это происходит в Mobile WebKit?Это очень раздражает, так как это плохой HCI.Я попытался добавить следующую строку, чтобы исправить проблему, но без радости:
if(window.location.hash)
{
var the_hash = window.location.hash.substring(1);
if($('#' + the_hash).length > 0)
{
$('.current').removeClass('current');
$('#' + the_hash).find('*').removeClass('hover');
$('#' + the_hash).addClass('current');
}
}
else
{
$('div').eq(0).addClass('current');
}
Большое спасибо за любую помощь, и извините, что пошли!