【问题标题】:Show and hide divs after few seconds in jQuery在 jQuery 中几秒钟后显示和隐藏 div
【发布时间】:2019-10-29 08:09:38
【问题描述】:

我有一些链接,当我将鼠标悬停在上面时会显示与该链接相关的特定文本。我使用悬停功能来显示和隐藏 div。

我还想添加一个功能,使文本在几秒钟后自动更改以显示下一个 div 的内容。即通过div循环。隐藏 div 1、显示 div 2、隐藏 2、显示 div 3 等。下面是显示悬停功能如何工作的代码。将鼠标悬停在右侧的链接上,左侧的文字会发生变化:

$(".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();
});
.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>



</body>

【问题讨论】:

  • 如果元素悬停,动画是否需要运行?还是仅当没有元素悬停时?
  • 仅当没有元素悬停时

标签: javascript jquery html css


【解决方案1】:

你可以这样做:

var homeLinks = ['i-t', 'o-c', 'c-f', 'i-c', 'c-u'];
var currentLink = 0;
var hovered = false;

$(".home-link").hover(function() {
  hovered = true;
  $('.home-'+homeLinks[currentLink]).hide();
  $('[data-hover='+homeLinks[currentLink]+']').toggleClass('default-underline');
  currentLink = homeLinks.indexOf($(this).attr('data-hover'));
  $('[data-hover='+homeLinks[currentLink]+']').toggleClass('default-underline');
  $('.home-'+homeLinks[currentLink]).show();
}, function() {
  hovered = false;
});

var autoNavInterval = setInterval(autoNav, 1000);

function autoNav() {
  if(hovered === false){
    $('.home-'+homeLinks[currentLink]).hide();
    $('[data-hover='+homeLinks[currentLink]+']').toggleClass('default-underline');
    currentLink++;
    if(currentLink >= homeLinks.length){ currentLink = 0; }
    $('[data-hover='+homeLinks[currentLink]+']').toggleClass('default-underline');
    $('.home-'+homeLinks[currentLink]).show();
  }
}
.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/3.3.1/jquery.min.js"></script>
<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 data-hover="o-c" class="home-link" href="#" data-toggle="my-scrollspy-2">O C</a></li>
        <li class="pivot-nav-item"><a data-hover="c-f" class="home-link" href="#" data-toggle="my-scrollspy-2">C F</a></li>
        <li class="pivot-nav-item"><a data-hover="i-c" class="home-link" href="#" data-toggle="my-scrollspy-2">I C</a></li>
        <li class="pivot-nav-item" data-toggle="my-scrollspy-2"><a data-hover="c-u" class="home-link" href="#">C U</a></li>
      </ul>

    </div>
  </div>

请注意,我在您的链接中添加了 data-hover 属性和 .home-link,这可以简化脚本...我使用 setInterval 自动显示功能,每 1 秒一次,但您可能想要更改它稍长一点,我创建了hovered var 作为标志,以了解鼠标当前是否位于链接上,并防止自动导航在链接悬停时更改显示的文本。

【讨论】:

  • 谢谢。是否可以移动链接的下划线,以便随着文本的变化而变化?
  • 好的我编辑了,我添加了一个toggleClass来将'.default-underline'类更改为当前链接。请注意,我从 html 部分中删除了 default-underline 类,因为 autonav 函数会将其添加到第一个链接...
  • 这非常有效。谢谢。但是 o c 的文本出现在下划线之前。有什么特别的原因吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-11
  • 1970-01-01
  • 1970-01-01
  • 2011-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多