【问题标题】:How can I change slide by mouse scroll?如何通过鼠标滚动更改幻灯片?
【发布时间】:2022-01-11 17:31:08
【问题描述】:

有什么方法可以让我在https://jsfiddle.net/PortfolioCSG/wzcgp7y1/15/ 获得的示例通过滚动用户鼠标(以及使用导航点/箭头)来更改幻灯片?

我希望用户能够滚动幻灯片/画廊,而无需单击鼠标(如果他们不想),但我在编写代码/找到有效的东西时遇到了麻烦。

我尝试了几个不同的 javascript 代码,但都失败了。

TIA。

    <div class="slideshow-container">
  <div class="mySlides1 fade"> 
    <!--Image here-->
    <div class="image img1">Image 1-1</div>
  </div>
  <div class="mySlides1 fade"> 
    <!--Image here-->
    <div class="image img2">Image 1-2</div>
  </div>
  <div class="mySlides1 fade"> 
    <!--Image here-->
    <div class="image img3">Image 1-3</div>
  </div>
  <a class="prev" onclick="plusSlides(-1, 0)">&#10094;</a> <a class="next" onclick="plusSlides(1, 0)">&#10095;</a>
  <div style="text-align:center"> <span class="dot" onclick="currentSlide(1,0)"></span> <span class="dot" onclick="currentSlide(2,0)"></span> <span class="dot" onclick="currentSlide(3,0)"></span> </div>
</div>
<div class="slideshow-container">
  <div class="mySlides2 fade"> 
    <!--Image here-->
    <div class="image img1">Image 2-1</div>
  </div>
  <div class="mySlides2 fade"> 
    <!--Image here-->
    <div class="image img2">Image 2-2</div>
  </div>
  <div class="mySlides2 fade"> 
    <!--Image here-->
    <div class="image img3">Image 2-3</div>
  </div>
  <a class="prev" onclick="plusSlides(-1, 1)">&#10094;</a> <a class="next" onclick="plusSlides(1, 1)">&#10095;</a>
  <div style="text-align:center"> <span class="dot" onclick="currentSlide(1,1)"></span> <span class="dot" onclick="currentSlide(2,1)"></span> <span class="dot" onclick="currentSlide(3,1)"></span> </div>
</div>
<div class="slideshow-container">
  <div class="mySlides3 fade"> 
    <!--Image here-->
    <div class="image img1">Image 3-1</div>
  </div>
  <div class="mySlides3 fade"> 
    <!--Image here-->
    <div class="image img2">Image 3-2</div>
  </div>
  <div class="mySlides3 fade"> 
    <!--Image here-->
    <div class="image img3">Image 3-3</div>
  </div>
  <a class="prev" onclick="plusSlides(-1, 2)">&#10094;</a> <a class="next" onclick="plusSlides(1, 2)">&#10095;</a>
  <div style="text-align:center"> <span class="dot" onclick="currentSlide(1,2)"></span> <span class="dot" onclick="currentSlide(2,2)"></span> <span class="dot" onclick="currentSlide(3,2)"></span> </div>
</div>
<div class="slideshow-container">
  <div class="mySlides4 fade"> 
    <!--Image here-->
    <div class="image img1">Image 4-1</div>
  </div>
  <div class="mySlides4 fade"> 
    <!--Image here-->
    <div class="image img2">Image 4-2</div>
  </div>
  <div class="mySlides4 fade"> 
    <!--Image here-->
    <div class="image img3">Image 4-3</div>
  </div>
  <a class="prev" onclick="plusSlides(-1, 3)">&#10094;</a> <a class="next" onclick="plusSlides(1, 3)">&#10095;</a>
  <div style="text-align:center"> <span class="dot" onclick="currentSlide(1,3)"></span> <span class="dot" onclick="currentSlide(2,3)"></span> <span class="dot" onclick="currentSlide(3,3)"></span> </div>
</div>
<div class="slideshow-container">
  <div class="mySlides5 fade"> 
    <!--Image here-->
    <div class="image img1">Image 5-1</div>
  </div>
  <div class="mySlides5 fade"> 
    <!--Image here-->
    <div class="image img2">Image 5-2</div>
  </div>
  <div class="mySlides5 fade"> 
    <!--Image here-->
    <div class="image img3">Image 5-3</div>
  </div>
  <a class="prev" onclick="plusSlides(-1, 4)">&#10094;</a> <a class="next" onclick="plusSlides(1, 4)">&#10095;</a>
  <div style="text-align:center"> <span class="dot" onclick="currentSlide(1,4)"></span> <span class="dot" onclick="currentSlide(2,4)"></span> <span class="dot" onclick="currentSlide(3,4)"></span> </div>
</div>
.mySlides1, .mySlides2, .mySlides3, .mySlides4, .mySlides5 {
    display: none
}
img {
    vertical-align: middle;
}
/* Slideshow container */
.slideshow-container {
    max-width: 1000px;
    position: relative;
    margin:0 auto 25px;
}
/* Next & previous buttons */
.prev, .next {
    cursor: pointer;
    position: absolute;
    top: 50%;
    width: auto;
    padding: 16px;
    margin-top: -22px;
    color: white;
    font-weight: bold;
    font-size: 18px;
    transition: 0.6s ease;
    border-radius: 0 3px 3px 0;
    user-select: none;
}
/* Position the "next button" to the right */
.next {
    right: 0;
    border-radius: 3px 0 0 3px;
}
/* On hover, add a grey background color */
.prev:hover, .next:hover {
    background-color: #f1f1f1;
    color: black;
}
/* Fading animation */
.fade {
    -webkit-animation-name: fade;
    -webkit-animation-duration: 1.5s;
    animation-name: fade;
    animation-duration: 1.5s;
}
 @-webkit-keyframes fade {
 from {
opacity: .4
}
to {
    opacity: 1
}
}
 @keyframes fade {
 from {
opacity: .4
}
to {
    opacity: 1
}
}

/* On smaller screens, decrease text size */
@media only screen and (max-width: 300px) {
.prev, .next, .text {
    font-size: 11px
}
}
/* The dots/bullets/indicators */
.dot {
    cursor: pointer;
    height: 15px;
    width: 15px;
    margin: 0 2px;
    background-color: #bbb;
    border-radius: 50%;
    display: inline-block;
    transition: background-color 0.6s ease;
}
.active, .dot:hover {
    background-color: #717171;
}
.image {
    height:100px;
    background:red;
}
.img1 {
    background:red
}
.img2 {
    background:yellow
}
.img3 {
    background:green
}
var slideIndex = [1,1,1,1,1];
var slideId = ["mySlides1", "mySlides2", "mySlides3", "mySlides4", "mySlides5"]
showSlides(1, 0);
showSlides(1, 1);
showSlides(1, 2);
showSlides(1, 3);
showSlides(1, 4);

function plusSlides(n, no) {
  showSlides(slideIndex[no] += n, no);
}
function currentSlide(n, no) {
  showSlides(slideIndex[no] = n, no);
}
function showSlides(n, no) {
  var i;
  var x = document.getElementsByClassName(slideId[no]);
  if (n > x.length) {slideIndex[no] = 1}    
  if (n < 1) {slideIndex[no] = x.length}
  for (i = 0; i < x.length; i++) {
     x[i].style.display = "none";  
  }
  x[slideIndex[no]-1].style.display = "block";  
}

【问题讨论】:

  • 请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。

标签: javascript slider carousel slideshow


【解决方案1】:

我不能 100% 确定您想要什么,但这里有一种方法可以帮助您通过滚动来更改图像。

工作原理:当页面滚动时,事件监听器触发一个函数。然后我们使用window.scrollY,它返回文档当前垂直滚动的像素数,我们使用这个数字对滑块进行更改。

const slider = document.getElementById('slider');

document.addEventListener('scroll', (e) => {
  
  let y = window.scrollY;
  
  if(y < 100){
    slider.src = "https://picsum.photos/id/50/300";
  }
  else if(y < 200){
    slider.src = "https://picsum.photos/id/100/300";
  }
  else if(y < 300){
    slider.src = "https://picsum.photos/id/200/300";
  }
})
<body style="height:2000px">
<img id="slider" style="position:fixed" src="https://picsum.photos/id/50/300">
</body>

【讨论】:

    猜你喜欢
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多