【问题标题】:Get the last active class on hover when mouse cursor leaves div?当鼠标光标离开div时,在悬停时获取最后一个活动类?
【发布时间】:2017-11-20 21:57:20
【问题描述】:

我有 3 张幻灯片的手风琴菜单。我需要在悬停时获取最后一个活动类,以便能够将其用于检查条件,以在鼠标光标离开菜单 div 时保持该幻灯片打开。到目前为止,我能够将类附加到每张幻灯片,但它们只检查它们是否在菜单 div 内。有没有办法检查我悬停的最后一张活动幻灯片?
Codepen

HTML 代码

 <div class="myMenu">
      <ul>
        <li class="mySlides slide1"><a class="img1" href="#"></a></li>
        <li class="mySlides slide2"><a class="img2" href="#"></a></li>
        <li class="mySlides slide3"><a class="img3" href="#"></a></li>
      </ul>
    </div>

JavaScript

var slide1 = document.querySelector('.slide1');
var slide2 = document.querySelector('.slide2');
var slide3 = document.querySelector('.slide3');
  var img1 = document.querySelector('.img1');
  var img2 = document.querySelector('.img2');
  var img3 = document.querySelector('.img3');

/*  */
document.querySelector('.myMenu').addEventListener('mouseout', mouseOutMenu);
function mouseOutMenu() {
  if(slide1.classList.contains('insideMenu')) {
    slide1.style.width = '298px';
    img1.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/1_open_leszbs.jpg')";

    slide2.style.width = '21px';
    img2.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/2_closed_aonaaq.jpg')";
    slide3.style.width = '21px';
    img3.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/3_closed_tobbqu.jpg')";
  } 

  if(slide2.classList.contains('insideMenu')) {
    slide2.style.width = '301px';
    img2.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/2_open_g8qfff.jpg')";

    slide1.style.width = '21px';
    img1.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/1_closed_pnlynb.jpg')";
    slide3.style.width = '21px';
    img3.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/3_closed_tobbqu.jpg')";
  } 

  if(slide3.classList.contains('insideMenu')) {
    slide3.style.width = '301px';
    img3.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/3_open_gcengd.jpg')";

    slide1.style.width = '21px';
    img1.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/1_closed_pnlynb.jpg')";
    slide2.style.width = '21px';
    img2.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/2_closed_aonaaq.jpg')";
  }
}

/****************           1           *******************/
/**********************************************************/
document.querySelector('.slide1').addEventListener('mouseover', mouseOver1);
function mouseOver1() {
  slide1.classList.add('insideMenu');  

  if(slide1.style.width == '298px') {
      slide1.style.width = '298px';
    img1.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/1_open_leszbs.jpg')";
  } else {
    slide1.style.width = '298px';
    img1.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/1_open_leszbs.jpg')";
  }

  slide2.style.width = '21px';
  img2.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/2_closed_aonaaq.jpg')";

  slide3.style.width = '21px';
  img3.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/3_closed_tobbqu.jpg')";
}

document.querySelector('.slide1').addEventListener('mouseout', mouseOut1);
function mouseOut1() {

    if(slide1.style.width > '21px') {
      slide1.style.width = '21px';
      img1.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/1_closed_pnlynb.jpg')";
    }
}

/****************           2           *******************/
/**********************************************************/
document.querySelector('.slide2').addEventListener('mouseover', mouseOver2);
function mouseOver2() {
  slide2.classList.add('insideMenu');  
  if(slide2.style.width == '301px') {
      slide2.style.width = '301px';
    img2.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/2_open_g8qfff.jpg')";
  } else {
    slide2.style.width = '301px';
    img2.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/2_open_g8qfff.jpg')";
  }

  // close the rest of slides
  slide1.style.width = '21px';
  img1.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/1_closed_pnlynb.jpg')";

  slide3.style.width = '21px';
  img3.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/3_closed_tobbqu.jpg')";
}

document.querySelector('.slide2').addEventListener('mouseout', mouseOut2);
function mouseOut2() {

    if(slide2.style.width > '21px') {
      slide2.style.width = '21px';
      img2.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/2_closed_aonaaq.jpg')";
    }
}

/****************           3           *******************/
/**********************************************************/
document.querySelector('.slide3').addEventListener('mouseover', mouseOver3);
function mouseOver3() {
  slide3.classList.add('insideMenu');  
  if(slide3.style.width == '301px') {
      slide3.style.width = '301px';
    img3.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/3_open_gcengd.jpg')";
  } else {
    slide3.style.width = '301px';
    img3.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/3_open_gcengd.jpg')";
  }

  slide2.style.width = '21px';
  img2.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/2_closed_aonaaq.jpg')";

  slide1.style.width = '21px';
  img1.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/1_closed_pnlynb.jpg')";
}

document.querySelector('.slide3').addEventListener('mouseout', mouseOut3);
function mouseOut3() {

    if(slide3.style.width > '21px') {
      slide3.style.width = '21px';
      img3.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/3_closed_tobbqu.jpg')";
    }
}

/**********************************************************/

【问题讨论】:

  • 所以您想在鼠标在幻灯片上或鼠标悬停在幻灯片上然后出来时停止幻灯片循环?但是在最后一个选项中,轮播将不再自动滑动......
  • 是的。一旦鼠标悬停菜单 div 以停止循环。是否可以再次循环,比如鼠标光标离开 div 10 秒后?

标签: javascript html css


【解决方案1】:

只需对您的代码稍作修改。我希望它符合您的需求,顺便说一下,这是一个起点:

var slide1 = document.querySelector('.slide1');
var slide2 = document.querySelector('.slide2');
var slide3 = document.querySelector('.slide3');
var img1 = document.querySelector('.img1');
var img2 = document.querySelector('.img2');
var img3 = document.querySelector('.img3');


var timer;

/*  */
document.querySelector('.myMenu').addEventListener('mouseout', mouseOutMenu);

function mouseOutMenu() {
  if (slide1.classList.contains('insideMenu')) {
    slide1.style.width = '298px';
    img1.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/1_open_leszbs.jpg')";

    slide2.style.width = '21px';
    img2.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/2_closed_aonaaq.jpg')";
    slide3.style.width = '21px';
    img3.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/3_closed_tobbqu.jpg')";
  }

  if (slide2.classList.contains('insideMenu')) {
    slide2.style.width = '301px';
    img2.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/2_open_g8qfff.jpg')";

    slide1.style.width = '21px';
    img1.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/1_closed_pnlynb.jpg')";
    slide3.style.width = '21px';
    img3.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/3_closed_tobbqu.jpg')";
  }

  if (slide3.classList.contains('insideMenu')) {
    slide3.style.width = '301px';
    img3.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/3_open_gcengd.jpg')";

    slide1.style.width = '21px';
    img1.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/1_closed_pnlynb.jpg')";
    slide2.style.width = '21px';
    img2.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/2_closed_aonaaq.jpg')";
  }
}

/****************           1           *******************/
/**********************************************************/
document.querySelector('.slide1').addEventListener('mouseover', mouseOver1);

function mouseOver1() {
  pauseTheLoop();
  slide1.classList.add('insideMenu');

  if (slide1.style.width == '298px') {
    slide1.style.width = '298px';
    img1.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/1_open_leszbs.jpg')";
  } else {
    slide1.style.width = '298px';
    img1.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/1_open_leszbs.jpg')";
  }

  slide2.style.width = '21px';
  img2.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/2_closed_aonaaq.jpg')";

  slide3.style.width = '21px';
  img3.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/3_closed_tobbqu.jpg')";
}

document.querySelector('.slide1').addEventListener('mouseout', mouseOut1);

function mouseOut1() {

  if (slide1.style.width > '21px') {
    slide1.style.width = '21px';
    img1.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/1_closed_pnlynb.jpg')";
  }
}

/****************           2           *******************/
/**********************************************************/
document.querySelector('.slide2').addEventListener('mouseover', mouseOver2);

function mouseOver2() {
  pauseTheLoop();
  slide2.classList.add('insideMenu');
  if (slide2.style.width == '301px') {
    slide2.style.width = '301px';
    img2.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/2_open_g8qfff.jpg')";
  } else {
    slide2.style.width = '301px';
    img2.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/2_open_g8qfff.jpg')";
  }

  // close the rest of slides
  slide1.style.width = '21px';
  img1.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/1_closed_pnlynb.jpg')";

  slide3.style.width = '21px';
  img3.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/3_closed_tobbqu.jpg')";
}

document.querySelector('.slide2').addEventListener('mouseout', mouseOut2);

function mouseOut2() {

  if (slide2.style.width > '21px') {
    slide2.style.width = '21px';
    img2.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/2_closed_aonaaq.jpg')";
  }
}

/****************           3           *******************/
/**********************************************************/
document.querySelector('.slide3').addEventListener('mouseover', mouseOver3);

function mouseOver3() {
  pauseTheLoop();
  slide3.classList.add('insideMenu');
  if (slide3.style.width == '301px') {
    slide3.style.width = '301px';
    img3.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/3_open_gcengd.jpg')";
  } else {
    slide3.style.width = '301px';
    img3.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/3_open_gcengd.jpg')";
  }

  slide2.style.width = '21px';
  img2.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/2_closed_aonaaq.jpg')";

  slide1.style.width = '21px';
  img1.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/1_closed_pnlynb.jpg')";
}

document.querySelector('.slide3').addEventListener('mouseout', mouseOut3);

function mouseOut3() {

  if (slide3.style.width > '21px') {
    slide3.style.width = '21px';
    img3.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/3_closed_tobbqu.jpg')";
    /*img3.style.backgroundRepeat = 'no-repeat';*/
  }
}

/**********************************************************/
var slideIndex = 0;
carousel();

function carousel() {
  var index;
  var slides = document.getElementsByClassName('mySlides');
  for (index = 0; index < slides.length; index++) {
    slides[index].style.width = '21px';
    if (slides[0].style.width == '21px') {
      img1.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/1_closed_pnlynb.jpg')";
      img1.style.backgroundRepeat = 'no-repeat';
    }
    if (slides[1].style.width == '21px') {
      img2.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/2_closed_aonaaq.jpg')";
      img2.style.backgroundRepeat = 'no-repeat';
    }
    if (slides[2].style.width == '21px') {
      img3.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/3_closed_tobbqu.jpg')";
      img3.style.backgroundRepeat = 'no-repeat';
    }
  }
  slideIndex++;
  if (slideIndex > slides.length) {
    slideIndex = 1;
  }
  slides[slideIndex - 1].style.width = '301px';
  if (slides[0].style.width == '301px') {
    slides[0].style.width = '298px'
    img1.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/1_open_leszbs.jpg')";
  }
  if (slides[1].style.width == '301px') {
    img2.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/2_open_g8qfff.jpg')";
  }
  if (slides[2].style.width == '301px') {
    img3.style.backgroundImage = "url('https://res.cloudinary.com/dijc9b7wz/image/upload/v1511157235/3_open_gcengd.jpg')";
  }

  timer = setTimeout(function() {
    carousel();
  }, 2000);

}

function pauseTheLoop() {
  clearTimeout(timer);
  console.log('stop loop');
  timer = setTimeout(function() {
    carousel();
    console.log('restart loop');
  }, 10000);
}
.myMenu {
	position: relative;
	width: 420px;
	height: 161px;
	overflow: hidden;
	margin: 35px;
  outline:1px solid red;
}
.myMenu ul {
	list-style: none;
	margin: 0px;
	display: block;
	}
.myMenu ul li {
	float: left;
	margin-right:5px;
	padding-bottom:2px;
	transition: width .3s ease-in-out;
}
.myMenu ul li a {
	/*border-right: 1px solid #fff;*/
	cursor:pointer;
	display:block;
	/*overflow:hidden;*/
	height: 161px;
	margin-left:1px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="myMenu">
  <ul>
    <li class="mySlides slide1">
      <a class="img1" href="#"></a>
    </li>
    <li class="mySlides slide2">
      <a class="img2" href="#"></a>
    </li>
    <li class="mySlides slide3">
      <a class="img3" href="#"></a>
    </li>
  </ul>
</div>

我添加了对您创建的计时器的控制,因此您可以在鼠标悬停在幻灯片上时将其销毁并停止循环 n 秒。 这是代码笔:https://codepen.io/anon/pen/BmYOrZ?editors=1111

【讨论】:

  • 谢谢。是的,这绝对是一个起点。考虑检查循环是否停止并从那里开始。
【解决方案2】:

想办法继续显示最新的活动幻灯片。 创建了 3 个变量:

   var lastSlide;
   var lastImg;
   var lastImgPath="";

使用它们来存储鼠标悬停事件的图像路径 和 img 与用于鼠标悬停的幻灯片类。 对所有载玻片重复此操作。 最后,将它们添加到菜单 div 的主 mouseout 事件中,这使得该部分变得更小:

document.querySelector('.myMenu').addEventListener('mouseout', mouseOutMenu);
function mouseOutMenu() {
  lastSlide.style.width = '301px';
  lastImg.style.backgroundImage = lastImgPath;
}

Codepen attached here.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 2014-09-16
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多