这是一款js左右两侧分屏动画轮播图特效。该轮播图特效中,图片和描述文本分居屏幕的两侧,在鼠标上下滚动时,图片和描述文本做上下相对运动,效果非常炫酷。

使用方法

在页面中引入style.css文件。

<link href="css/style.css" rel="stylesheet">
                
HTML结构

该轮播图的html结构如下:

<div class="wrapper">
     <div class="container">
         <div class="slideshow">
              <div class="slideshow-left">
                  <div class="Lslide">
                      <div class="Lslide-content">
                          <h2>Probably not</h2>
                          <p>Be a part of our creation</p>
                          <div class="button">
                              <a href="#">
                                  <p>More</p>
                                  <i class="fa fa-chevron-right" aria-hidden="true"></i>
                              </a>
                          </div>
                      </div>
                  </div>
                  <div class="Lslide">
                      <div class="Lslide-content">
                          <h2>But not today</h2>
                          <p>Be a part of our creation</p>

                          <div class="button">
                              <a href="#">
                                  <p>More</p>
                                  <i class="fa fa-chevron-right" aria-hidden="true"></i>
                              </a>
                          </div>
                      </div>
                  </div>
                  <div class="Lslide">
                      <div class="Lslide-content">
                          <h2>Probably not</h2>
                          <p>Be a part of our creation</p>

                          <div class="button">
                              <a href="#">
                                  <p>More</p>
                                  <i class="fa fa-chevron-right" aria-hidden="true"></i>
                              </a>
                          </div>
                      </div>
                  </div>    
              </div>
              <div class="slideshow-right">
                  <div class="Rslide">
                      <img src="img/flower-3.jpg" alt="">
                  </div>

                  <div class="Rslide">
                      <img src="img/flower-5.jpg" alt="">
                  </div>     
                  <div class="Rslide">
                      <img src="img/flower-1.jpg" alt="">
                  </div>                                              
              </div>    
              <div class="control">
                  <div class="oncontrol control-top">
                      <i class="fa fa-arrow-up" aria-hidden="true"></i>
                  </div>
                  <div class="oncontrol control-bottom">
                      <i class="fa fa-arrow-down" aria-hidden="true"></i>
                  </div>                          
              </div>
         </div>
     </div>
 </div>
                
javaScript

然后在页面DOM元素加载完毕之后,通过下面的方法来初始化该轮播图。

var Lslide      = document.querySelectorAll('.Lslide'),
    Rslide      = document.querySelectorAll('.Rslide'),
    control     = document.querySelectorAll('.oncontrol'),
    slideHeight = document.querySelector('.wrapper').clientHeight,
    color = ['#fdc97c', '#e5d3d0', '#71b3d6'],
    index = 0;


function init() {
    slideHeight = document.querySelector('.wrapper').clientHeight;
    for (i = 0; i < Lslide.length; i++) {
        Lslide[i].style.backgroundColor = color[i];
        Lslide[i].style.top = -slideHeight * i + "px";
        Rslide[i].style.top = slideHeight * i + "px";
    }  
}
init()
window.addEventListener('resize', function(){
    init()
});

function moveToTop() {

    index++;
    for (el = 0; el < Lslide.length; el++) {
        Lslide[el].style.top = parseInt(Lslide[el].style.top) + slideHeight + "px";
        Rslide[el].style.top = parseInt(Rslide[el].style.top) - slideHeight + "px";
    }

    if (index > Lslide.length-1) {
        index = 0;
        for (el = 0; el < Lslide.length; el++) {
            Lslide[el].style.top = -slideHeight * el + "px";
            Rslide[el].style.top = slideHeight * el + "px";
        }
    }
}

function moveToBottom() {
    index--;
    for (el = 0; el < Lslide.length; el++) {
        Lslide[el].style.top = parseInt(Lslide[el].style.top) - slideHeight + "px";
        Rslide[el].style.top = parseInt(Rslide[el].style.top) + slideHeight + "px";
        
    }
    if (index < 0) {
        index = Rslide.length-1;
        for (el = 0; el < Lslide.length; el++) {
            Lslide[el].style.top = parseInt(Lslide[el].style.top) + slideHeight * Lslide.length + "px";
            Rslide[el].style.top = parseInt(Rslide[el].style.top) - slideHeight * Rslide.length + "px";
        }
    }
}

function transition() {
    for (t = 0; t < Lslide.length; t++) {
        Lslide[t].style.transition = "all 0.8s";
        Rslide[t].style.transition = "all 0.8s";
    }
}
  

for (t = 0; t < control.length; t++) {
    control[t].addEventListener("click", function() {

        if (this.classList.contains('control-top')) {
            moveToTop()
        } 
        if (this.classList.contains('control-bottom')) {
            moveToBottom()
        }

        transition()
   
    });
}

var wheeling;
function mousemouve(e) {

    clearTimeout(wheeling);
    e.preventDefault();
    var e = window.event || e; 
    var delta = Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail)));
    
    wheeling = setTimeout(function() {
        wheeling = undefined;
        if (delta === 1) {
            moveToTop()
        }
        if (delta === -1) {
            moveToBottom()
        }
    }, 100);

    transition()
}

document.addEventListener("mousewheel", mousemouve);
document.addEventListener("DOMMouseScroll", mousemouve);
                

该js左右两侧分屏动画轮播图特效的codepen地址为:https://codepen.io/GrandvincentMarion/pen/NaEELP