jquery防止悬停功能触摸

前端之家收集整理的这篇文章主要介绍了jquery防止悬停功能触摸前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个悬停功能,如果它是触摸设备,我希望悬停事件不会发生.问题是当您点击带有触摸设备的链接时,它会在执行点击事件之前执行悬停事件,因此您必须点击它两次才能使用它.

这是悬停功能

  1. $("#close").hover(
  2. function () {
  3. $("#close_2").css({
  4. display: "none"
  5. });
  6. $("#close_1").css({
  7. display: "block"
  8. });
  9. },function () {
  10. $("#close_1").css({
  11. display: "none"
  12. });
  13. $("#close_2").css({
  14. display: "block"
  15. });;
  16. }
  17. );

然后我将此设置为click功能

  1. $('#close').click(function() {
  2. var id = $(this).attr('id');
  3. $('#full_image').animate({
  4. height: 0
  5. },300,function() {
  6. $('#full_image img').attr('src','#');
  7. });
  8. $("#close_1").css({
  9. display: "none"
  10. });
  11. $("#close_2").css({
  12. display: "none"
  13. });
  14. $("#close").css({
  15. display: "none"
  16. });
  17. });

解决方法

使.hover()方法更明确,并将其与.on()结合使用:
  1. var $close1 = $('#close_1'),$close2 = $('#close_2');
  2.  
  3. $('#close').on({
  4. mouseenter: function(){
  5. $close2.css({display:'none'});
  6. $close1.css({display:'block'});
  7. },mouseleave: function(){
  8. $close1.css({display:'none'});
  9. $close2.css({display:'block'});
  10. }
  11. });

然后将其与.off()结合使用.

  1. $('#close').on('touchstart',function(){
  2. $(this).off('mouseenter,mouseleave');
  3. });

如果您希望在点击触摸设备时触发事件,但悬停在桌面设备上,则将这些功能分别作为您在这些操作中调用的单独功能.

编辑

我做了这个答案已经有一段时间了,这是一个更好的方法

  1. $(function(){
  2. var isTouchDevice = ('ontouchstart' in window || 'onmsgesturechange' in window),$close = $('#close'),$close1 = $('#close_1'),$close2 = $('#close_2');
  3.  
  4. if(!isTouchDevice){
  5. $close.on({
  6. mouseenter: function(){
  7. $close2.hide();
  8. $close1.show();
  9. },mouseleave: function(){
  10. $close1.hide();
  11. $close2.show();
  12. }
  13. });
  14. }
  15.  
  16. $close.on('click',function(){
  17. $('#full_image').animate({height:0},function(){
  18. $(this).find('img').attr('src','#');
  19. });
  20.  
  21. $close.hide();
  22. $close1.hide();
  23. $close2.hide();
  24. });
  25. });

这不需要每次触摸都会触发“悬停预防”事件,基本上设置页面加载功能,同时不影响点击事件.

猜你在找的jQuery相关文章