javascript - 在 jQuery 中执行基于主体类的悬停功能

标签 javascript jquery html css

我有一个悬停功能,可以在悬停在某些链接上时显示文本,而且效果很好。但是,仅当正文没有 user-is-touching 类时,我才尝试执行此函数。这有可能吗?如果可以,我该怎么做?

$(".o-c").hover(function() {
  $('.home-o-c').show();
  $('.home-i-t').hide();
}, function() {
  $('.home-o-c').hide();
  $('.home-i-t').show();
});

$(".c-f").hover(function() {
  $('.home-c-f').show();
  $('.home-i-t').hide();
}, function() {
  $('.home-c-f').hide();
  $('.home-i-t').show();
});

$(".i-c").hover(function() {
  $('.home-i-c').show();
  $('.home-i-t').hide();
}, function() {
  $('.home-i-c').hide();
  $('.home-i-t').show();
});


$(".c-u").hover(function() {
  $('.home-c-u').show();
  $('.home-i-t').hide();
}, function() {
  $('.home-c-u').hide();
  $('.home-i-t').show();
});

window.addEventListener('touchstart', function onFirstTouch() {
  // we could use a class
  document.body.classList.add('user-is-touching');

  // or set some global variable
  window.USER_IS_TOUCHING = true;

  // or set your app's state however you normally would


  // we only need to know once that a human touched the screen, so we can stop listening now
  window.removeEventListener('touchstart', onFirstTouch, false);
}, false);


$(".o-c").click(function() {
  if ($('body').hasClass('user-is-touching')) {
    $('.home-o-c').show();



  } else {
    $('html, body').animate({
      scrollTop: $(".our-company").offset().top
    }, 2000);

  }
});

$(".c-f").click(function() {
  if ($('body').hasClass('user-is-touching')) {
    $('.home-c-f').show();
    $('.home-o-c').hide();
    $('.home-i-c').hide();
    $('.home-c-u').hide();
    $('.home-i-t').hide();



  } else {
    $('html, body').animate({
      scrollTop: $(".cf2").offset().top
    }, 2000);

  }
});
.left-fill {
  background: #0000006b;
  height: 100vh;
}

.right-fill {
  background: pink;
  height: 100vh;
}

.vc_col-sm-6 {
  width: 50%;
  float: left;
}

.pivot-nav {
  list-style: none;
  font-family: 'Montserrat';
  text-align: left;
}

.pivot-nav li a {
  font-size: 1.6rem;
  font-weight: 700;
  text-transform: uppercase;
  display: inline-block;
  position: relative;
  color: #fff;
  text-decoration: none;
  line-height: 40px;
}

.pivot-nav li a.default-underline::after,
.pivot-nav li a:hover::after {
  width: 100%;
}

.pivot-nav:hover a.default-underline:not(:hover)::after {
  width: 0;
}

.pivot-nav li a::after {
  bottom: 0;
  content: "";
  display: block;
  height: 4px;
  position: absolute;
  background: #fff;
  transition: width 0.3s ease 0s;
  width: 0;
}

.home-o-c,
.home-c-f,
.home-i-c,
.home-c-u {
  display: none;
}

.our-company {
  clear: both;
  display: block;
  height: 50vh;
}

.cf2 {
  clear: both;
  display: block;
  height: 50vh;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<body>

  <div class="left-fill text-left wpb_column vc_column_container vc_col-sm-6">

    <div class="wpb_wrapper">
      <p class="home-i-t">TEXT One</p>
      <p class="home-o-c">TEXT One</p>
      <p class="home-c-f">TExt for C f.</p>
      <p class="home-i-c">Some more text fo i c.</p>
      <p class="home-c-u">Get in touch </p>

    </div>
  </div>



  <div class="home-fill right-fill text-right wpb_column vc_column_container vc_col-sm-6">

    <div class="wpb_wrapper">
      <ul class="pivot-nav">
        <li class="pivot-nav-item"><a class="o-c default-underline" href="#" data-toggle="my-scrollspy-2">O C</a></li>
        <li class="pivot-nav-item"><a class="c-f" href="#" data-toggle="my-scrollspy-2">C F</a></li>
        <li class="pivot-nav-item"><a class="i-c" href="#" data-toggle="my-scrollspy-2">I C</a></li>
        <li class="pivot-nav-item" data-toggle="my-scrollspy-2"><a class="c-u" href="#">C U</a></li>
      </ul>

    </div>
  </div>

  <div class="our-company">
    Our Company Scroll Down

  </div>

  <div class="cf2">
    cf2 Scroll Down

  </div>

</body>

最佳答案

您可以在将 user-is-touching 类添加到 body 时取消绑定(bind)事件。

例子

$(".c-f").unbind('mouseenter').unbind('mouseleave')

$(".c-f").off('mouseenter').off('mouseleave')

更新

引用这个片段

// Replace this event listener with your hover listeners

window.addEventListener('touchstart', function onFirstTouch() {
  // we could use a class
  document.body.classList.add('user-is-touching');

  // or set some global variable
  window.USER_IS_TOUCHING = true;

  // or set your app's state however you normally would

  // Remove mouse-related events here

   $(".o-c, .c-f, .i-c, .c-u").unbind('mouseenter').unbind('mouseleave')

  // we only need to know once that a human touched the screen, so we can stop listening now
  window.removeEventListener('touchstart', onFirstTouch, false);
}, false);

您需要更新您的 html 代码以在下面有 data-attr 属性更新代码

<li class="pivot-nav-item"><a data-attr="o-c" class="o-c default-underline" href="#"
            data-toggle="my-scrollspy-2">O C</a></li>
        <li class="pivot-nav-item"><a data-attr="c-f" class="c-f" href="#" data-toggle="my-scrollspy-2">C F</a></li>
        <li class="pivot-nav-item"><a data-attr="i-c" class="i-c" href="#" data-toggle="my-scrollspy-2">I C</a></li>
        <li class="pivot-nav-item" data-toggle="my-scrollspy-2"><a data-attr="c-u" class="c-u" href="#">C U</a></li>

关于javascript - 在 jQuery 中执行基于主体类的悬停功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58338410/

相关文章:

javascript - 从动态创建的输入和选择字段中获取值

javascript - 如何使用我的自定义函数切换此函数

javascript - CSS 和 JQuery : Better Usability

html - SVG 连续线加载器动画

php - 无法在 HTML 表格中显示来自 ajax 的数据

javascript - 在提交时传递主键而不是属性

javascript - 地址更改时如何停止 Angular 重新加载

javascript - 使用 javascript 创建一棵树

javascript - 通过按钮在特定 div 溢出中添加平滑垂直滚动

javascript - Bootstrap 选项卡问题