jQuery hover/click 在桌面和移动设备上
jQuery hover/click on desktop and mobile devices
我有一个包含两类的菜单:天气和雪。一个可见的图标和隐藏的弹出菜单。悬停或单击第一个 div 的图标后,它会显示第二个 div 弹出窗口。悬停在桌面设备上有反应,点击它在移动设备上。
这是我的 jQuery 代码的一部分:
if ($(window).width() > 1025) {
$('.weather').hover(function(){
$('.weather-popup').addClass('side-open');
},function(){
$('.weather-popup').removeClass('side-open');
});
$('.snow').hover(function(){
$('.snow-popup').addClass('side-open');
},function(){
$('.snow-popup').removeClass('side-open');
});
}
if ($(window).width() < 1025) {
$('.weather').click(function(){
$('.weather-popup').toggleClass('side-open');
});
$('.snow').click(function(){
$('.snow-popup').toggleClass('side-open');
});
}
第一部分适用于桌面设备并且运行良好,但我对第二部分 - 移动设备有疑问。
使用 iPad 当我触摸天气图标时,它显示弹出部分,再次触摸天气图标后,弹出部分隐藏。没关系,但是如果我触摸天气图标,然后触摸第二个菜单图标,在本例中 "Snow",它会显示雪花弹出窗口,并且天气 div 的弹出窗口部分保持打开状态。
我希望在触摸第二个类别时自动隐藏第一个类别。
此外,当触摸空白 space 时,div 应该会自动隐藏。
请问,我该如何实现?
$('html').click(function() {
//Hide the menus if visible
});
$('#menucontainer').click(function(event){
event.stopPropagation();
});
这是一个很好的方法。如果用户单击 window,则隐藏菜单。如果用户单击您的菜单区域,则取消该操作。这应该适用于移动设备上的 snow/weather windows。这是 link: How to detect a click outside an element? 。
I want the first category to be automatically hidden when I touch the second one.
您可以通过检查其他弹出窗口是否有 side-open
class.
来管理它
$('.weather').click(function(){
if ($('.snow-popup').hasClass('side-open')){
$('.snow-popup').removeClass('side-open');
}
$('.weather-popup').toggleClass('side-open');
});
$('.snow').click(function(){
if ($('.weather-popup').hasClass('side-open')){
$('.weather-popup').removeClass('side-open');
}
$('.snow-popup').toggleClass('side-open');
});
Also when touching on empty space, div is supposed to hide automatically.
您可以通过为整个文档设置一个 click
侦听器,在任何使用它的地方删除 side-open
class 来实现(这会隐藏您的对话框,对吗?) ,并使用 e.stopPropagation();
阻止点击传播到 html
级别,以便您可以打开对话框。
$('html').click(function() {
$('.side-open').removeClass('side-open');
});
$('.weather').click(function(e){
if ($('.snow-popup').hasClass('side-open')){
$('.snow-popup').removeClass('side-open');
}
$('.weather-popup').toggleClass('side-open');
e.stopPropagation();
});
$('.snow').click(function(e){
if ($('.weather-popup').hasClass('side-open')){
$('.weather-popup').removeClass('side-open');
}
$('.snow-popup').toggleClass('side-open');
e.stopPropagation();
});
我有一个包含两类的菜单:天气和雪。一个可见的图标和隐藏的弹出菜单。悬停或单击第一个 div 的图标后,它会显示第二个 div 弹出窗口。悬停在桌面设备上有反应,点击它在移动设备上。
这是我的 jQuery 代码的一部分:
if ($(window).width() > 1025) {
$('.weather').hover(function(){
$('.weather-popup').addClass('side-open');
},function(){
$('.weather-popup').removeClass('side-open');
});
$('.snow').hover(function(){
$('.snow-popup').addClass('side-open');
},function(){
$('.snow-popup').removeClass('side-open');
});
}
if ($(window).width() < 1025) {
$('.weather').click(function(){
$('.weather-popup').toggleClass('side-open');
});
$('.snow').click(function(){
$('.snow-popup').toggleClass('side-open');
});
}
第一部分适用于桌面设备并且运行良好,但我对第二部分 - 移动设备有疑问。
使用 iPad 当我触摸天气图标时,它显示弹出部分,再次触摸天气图标后,弹出部分隐藏。没关系,但是如果我触摸天气图标,然后触摸第二个菜单图标,在本例中 "Snow",它会显示雪花弹出窗口,并且天气 div 的弹出窗口部分保持打开状态。
我希望在触摸第二个类别时自动隐藏第一个类别。
此外,当触摸空白 space 时,div 应该会自动隐藏。
请问,我该如何实现?
$('html').click(function() {
//Hide the menus if visible
});
$('#menucontainer').click(function(event){
event.stopPropagation();
});
这是一个很好的方法。如果用户单击 window,则隐藏菜单。如果用户单击您的菜单区域,则取消该操作。这应该适用于移动设备上的 snow/weather windows。这是 link: How to detect a click outside an element? 。
I want the first category to be automatically hidden when I touch the second one.
您可以通过检查其他弹出窗口是否有 side-open
class.
$('.weather').click(function(){
if ($('.snow-popup').hasClass('side-open')){
$('.snow-popup').removeClass('side-open');
}
$('.weather-popup').toggleClass('side-open');
});
$('.snow').click(function(){
if ($('.weather-popup').hasClass('side-open')){
$('.weather-popup').removeClass('side-open');
}
$('.snow-popup').toggleClass('side-open');
});
Also when touching on empty space, div is supposed to hide automatically.
您可以通过为整个文档设置一个 click
侦听器,在任何使用它的地方删除 side-open
class 来实现(这会隐藏您的对话框,对吗?) ,并使用 e.stopPropagation();
阻止点击传播到 html
级别,以便您可以打开对话框。
$('html').click(function() {
$('.side-open').removeClass('side-open');
});
$('.weather').click(function(e){
if ($('.snow-popup').hasClass('side-open')){
$('.snow-popup').removeClass('side-open');
}
$('.weather-popup').toggleClass('side-open');
e.stopPropagation();
});
$('.snow').click(function(e){
if ($('.weather-popup').hasClass('side-open')){
$('.weather-popup').removeClass('side-open');
}
$('.snow-popup').toggleClass('side-open');
e.stopPropagation();
});