vad*_*lim 12 html javascript css mobile jquery
我的应用程序中有一个按字母顺序排列的滚动条(ASB),大多数智能手机都在他们的Contacts应用程序中.
现在,我的手指在ASB上滚动到特定项目没有问题touchstart touchend click etc...但是,我在智能手机上捕获hover或mouseover事件时遇到问题.
我试过touchstart touchswipe touchend mouseenter mousemove或hover没有运气.
任何建议表示赞赏.
TL; DR ; touchmove,touchstart并且touchend是使之成为可能的事件.
我发现人们一直告诉我,非本地应用程序无法在智能手机上提供悬停事件的功能.
但是,现代智能手机浏览器实际上提供了功能.我意识到解决方案实际上就在于一个非常简单的地方.通过一些调整,我已经计算出如何将这种行为模拟为跨平台,即使它有点作弊.
因此,大多数touchevents传递的参数都包含用户触摸屏幕所需的信息.
例如
var touch = event.originalEvent.changedTouches[0];
var clientY = touch.clientY;
var screenY = touch.screenY;
Run Code Online (Sandbox Code Playgroud)
因为我知道我的每个按钮的高度ASB,我只能计算用户将元素悬停在哪里.
这是CodePen在移动触摸设备上更容易尝试.(请注意,这仅适用于触摸设备,您仍然可以在切换设备模式下使用chrome)
这是我的最终代码,
var $startElem, startY;
function updateInfo(char) {
$('#info').html('Hover is now on "' + char + '"');
}
$(function() {
var strArr = "#abcdefghijklmnopqrstuvwxyz".split('');
for (var i = 0; i < strArr.length; i++) {
var $btn = $('<a />').attr({
'href': '#',
'class': 'btn btn-xs'
})
.text(strArr[i].toUpperCase())
.on('touchstart', function(ev) {
$startElem = $(this);
var touch = ev.originalEvent.changedTouches[0];
startY = touch.clientY;
updateInfo($(this).text());
})
.on('touchend', function(ev) {
$startElem = null;
startY = null;
})
.on('touchmove', function(ev) {
var touch = ev.originalEvent.changedTouches[0];
var clientY = touch.clientY;
if ($startElem && startY) {
var totalVerticalOffset = clientY - startY;
var indexOffset = Math.floor(totalVerticalOffset / 22); // '22' is each button's height.
if (indexOffset > 0) {
$currentBtn = $startElem.nextAll().slice(indexOffset - 1, indexOffset);
if ($currentBtn.text()) {
updateInfo($currentBtn.text());
}
} else {
$currentBtn = $startElem.prevAll().slice(indexOffset - 1, indexOffset);
if ($currentBtn.text()) {
updateInfo($currentBtn.text());
}
}
}
});
$('#asb').append($btn);
}
});Run Code Online (Sandbox Code Playgroud)
#info {
border: 1px solid #adadad;
position: fixed;
padding: 20px;
top: 20px;
right: 20px;
}Run Code Online (Sandbox Code Playgroud)
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="info">
No hover detected
</div>
<div id="asb" class="btn-group-vertical">
</div>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14807 次 |
| 最近记录: |