Javascript-轮播图

简介: Javascript-轮播图

轮播图


用savascript原生实现轮播图效果

652317abe1a94134a68c3327348ef48b.png

  • 首先我们创建一个文件夹(html,js,img)
  1. 构建主页面
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title></title>
    <style type="text/css">
      *{
        padding: 0;
        margin: 0;
      }
      li{
        list-style: none;
      }
      body{
        background: #CCCCCC;
      }
      #box{
        width: 400px;
        margin: 50px auto;
        height: 426px;
        overflow: hidden;
        border: 1px solid yellow;
      }
      #top{
        position: relative;
        height: 320px;
      }
      #top li{
        position: absolute;
        top: 0;
        left: 0;
      }
      #left{
        position: absolute;
        width: 200px;
        top: 0;
        left: 0;
        height: 320px;
        z-index: 1000;
        /* background: red; */
      }
      #right{
        position: absolute;
        width: 200px;
        height: 320px;
        top: 0;
        right: 0;
        z-index: 1000;
      }
      #btn_l{
        position: absolute;
        background: url(img/btn.gif) no-repeat;
        height: 60px;
        width: 60px;
        left: 10px;
        top: 130px;
        z-index: 1001;
        opacity: 0;
        filter: alpha(opacity=0);
      }
      #btn_r{
        position: absolute;
        background: url(img/btn.gif) no-repeat 0 -60px;
        height: 60px;
        width: 60px;
        right: 10px;
        top: 130px;
        z-index: 1001;
        opacity: 0;
        filter: alpha(opacity=0);
      }
      #bottom{
        position: relative;
      }
      #small_ul{
        position: absolute;
        top: 0;
        left: 0;
      }
      #small_ul li{
        float: left;
      }
      #small_ul img{
        height: 90px;
        width: 120px;
        padding: 6px;
      }
    </style>
  </head>
  <body>
    <div id="box">
      <ul id="top">
        <!-- 遮罩 -->
        <div id="left"></div>
        <div id="right"></div>
        <!-- 按钮 -->
        <a href="javascript:;" id="btn_l"></a>
        <a href="javascript:;" id="btn_r"></a>
        <!-- 大图 -->
        <li style="z-index: 1 ";><img src="img/1.jpg" /></li>
        <li><img src="img/2.jpg"/></li>
        <li><img src="img/3.jpg"/></li>
        <li><img src="img/4.jpg"/></li>
        <li><img src="img/5.jpg"/></li>
        <li><img src="img/6.jpg"/></li>
      </ul>
      <div id="bottom">
        <ul id="small_ul">
          <!-- 缩略图 -->
          <li><img src="img/1.jpg"/></li>
          <li><img src="img/2.jpg"/></li>
          <li><img src="img/3.jpg"/></li>
          <li><img src="img/4.jpg"/></li>
          <li><img src="img/5.jpg"/></li>
          <li><img src="img/6.jpg"/></li>
        </ul>
      </div>
    </div>
    <script src="js/sport.js"></script>
    <script src="js/index.js"></script>
  </body>
</html>


  • index.js部分
/*
    轮播图:
    核心:通过控制当前下标,来进行图片的切换
    轮播方式:width/height/left/top/background/display/zindex/opacity
    1. 左遮罩 - 移入 - 左按钮显示(改变按钮的透明度到1)
    2. 左遮罩 - 移出 - 左按钮消失(改变按钮的透明度到0)
    3. 右遮罩 - 移入 - 右按钮显示
    4. 右遮罩 - 移出 - 右按钮消失
    ?当鼠标移入左按钮的时候,是不是意味着移出了左遮罩呢?左按钮消失。?
    5. 左按钮 - 点击 
        当前下标 --
        if(当前下标 === -1){
            当前下标 = 长度- 1
        }
        调用轮播函数()
    6. 右按钮 - 点击
        当前下标 ++
        if(当前下标 === 长度){
            当前下标 = 0
        }
        调用轮播函数()
    7. 小图
        移入
        移入的小图 - 透明度 - 100
        移出
        if(移出的下标 !== 当前下标){
            移出的小图 - 透明度 - 50
        }
        点击
        当前下标 = 点击的下标
        调用轮播函数()
    8. 封装轮播函数
        大图:
        大图[当前下标].style.zIndex = ++ zIndex
        小图:
        if(当前下标 === 0){
            改变小图ul - left - 0
        }else if(当前下标 === length - 1){
            改变小图ul - left -   - (length - 3) * 单张小图的宽度
        }else{
            改变小图ul - left -   - (当前下标 - 1) * 单张小图的宽度
        }
*/
class Slider{
    constructor(){
        //实例属性
        //1. 左遮罩
        this.left = document.querySelector('#left');
        //2. 右遮罩
        this.right = document.querySelector('#right');
        //3. 左按钮
        this.ltBtn = document.querySelector('#btn_l');
        //4. 右按钮
        this.rtBtn = document.querySelector('#btn_r');
        //5. 大图
        this.bigPic = document.querySelectorAll('#top>li');
        //6. 小图ul
        this.smallUl = document.querySelector('#small_ul');
        //7. 小图
        this.smallPic = document.querySelectorAll('#bottom li');
        //图片数量
        this.num = this.smallPic.length;
        //当前下标
        this.curIndex = 0;
        //zindex的变量
        this.zIndex = 1;
        //根据小图数量,改变ul宽度
        this.smallUl.style.width = this.num * this.smallPic[0].offsetWidth + 'px';
        //8. 调用添加事件的方法
        this.addEvent();
        //9. 调用轮播函数,初始化小图的透明度
        this.init();
    }
    addEvent(){
        // 1. 左遮罩 - 移入 - 左按钮显示(改变按钮的透明度到1)
        this.left.onmouseenter = this.ltBtn.onmouseenter =  function(){
            sport(this.ltBtn,{opacity: 100});
        }.bind(this);
        // 2. 左遮罩 - 移出 - 左按钮消失(改变按钮的透明度到0)
        this.left.onmouseleave = () => {
            sport(this.ltBtn,{opacity: 0});
        }
        // 3. 右遮罩 - 移入 - 右按钮显示
        this.right.onmouseenter = this.rtBtn.onmouseenter = () => {
            sport(this.rtBtn,{opacity: 100});
        }
        // 4. 右遮罩 - 移出 - 右按钮消失
        this.right.onmouseleave = () => {
            sport(this.rtBtn,{opacity: 0});
        }
        // 5. 左按钮 - 点击 
        this.ltBtn.onclick = () => {
            this.curIndex --
            if(this.curIndex === -1){
                this.curIndex = this.num - 1
            }
            // 调用轮播函数()
            this.init();
        }
        // 6. 右按钮 - 点击
        this.rtBtn.onclick = () => {
            this.curIndex ++
            if(this.curIndex === this.num){
                this.curIndex = 0
            }
            // 调用轮播函数()
            this.init();
        }
        // 7. 小图
        //记录实例对象
        let that = this;
        for(let i = 0;i < this.num;i ++){
            // 移入
            this.smallPic[i].onmouseenter = function(){
                // 移入的小图 - 透明度 - 100
                sport(this,{opacity: 100});
            }
            // 移出
            this.smallPic[i].onmouseleave = function(){
                if(i !== that.curIndex){
                    // 移出的小图 - 透明度 - 50
                    sport(this,{opacity: 50});
                }
            }
            // 点击
            this.smallPic[i].onclick = () => {
                this.curIndex = i;
                // 调用轮播函数()
                this.init();
            }
        }
    }
    // 8. 封装轮播函数
    init(){
        // 大图:
        this.bigPic[this.curIndex].style.zIndex = ++ this.zIndex;
        // 小图:
        if(this.curIndex === 0){
            // 改变小图ul - left - 0
            sport(this.smallUl,{left: 0});
        }else if(this.curIndex === this.num - 1){
            // 改变小图ul - left -   - (length - 3) * 单张小图的宽度
            sport(this.smallUl,{left: - (this.num - 3) * this.smallPic[0].offsetWidth});
        }else{
            // 改变小图ul - left -   - (当前下标 - 1) * 单张小图的宽度
            sport(this.smallUl,{left: - (this.curIndex - 1) * this.smallPic[0].offsetWidth});
        }
        //初始化小图上的透明度
        //将所有的小图的透明度设置为50
        for(let i = 0;i < this.num;i ++){
            sport(this.smallPic[i],{opacity: 50});
        }
        //当前图片对应的小图透明度设置100
        sport(this.smallPic[this.curIndex],{opacity: 100});
    }
}
new Slider();


  • sport.js部分
//获取CSS样式
function getStyle(obj,attr){
  return obj.currentStyle ? obj.currentStyle[attr] : getComputedStyle(obj,1)[attr];
}
//完美运动
function sport(obj,json,fn){
  clearInterval(obj.timer);
  obj.timer = setInterval(function(){
    var stop = true; //检测停止的开关
    for(var attr in json){
      //获取初值
      var cur = 0;
      if(attr == "opacity"){
        cur = parseInt(parseFloat(getStyle(obj,attr)) * 100);
      }else{
        cur = parseInt(getStyle(obj,attr));
      }
      //设置速度
      var speed = (json[attr] - cur) / 8;
      speed = speed > 0? Math.ceil(speed) : Math.floor(speed);
      //检测停止
      if(json[attr] != cur){
        stop = false;
      }
      //运动
      if(attr == "opacity"){
        obj.style.opacity = (cur + speed ) / 100;
        obj.style.filter = "alpha(opacity=" + (cur + speed) + ")";
      }else{
        obj.style[attr] = cur + speed + "px";
      }
    }
    if(stop){
      clearInterval(obj.timer);
      if(fn){
        fn();
      }
    }
  },30);
}


目录
相关文章
|
1月前
|
前端开发
js-基础轮播图制作
js-基础轮播图制作
24 7
|
2月前
|
JavaScript 前端开发
js轮播图练习
文章介绍了如何使用HTML、CSS和JavaScript创建一个简单的轮播图效果。通过`img`标签展示图片,并通过点击下方的点(`span`标签)切换图片。文章提供了完整的HTML结构、CSS样式和JavaScript代码,以及图片的展示和轮播图的效果图。
js轮播图练习
|
1月前
|
JavaScript 前端开发
js轮播图有左右箭头和小点
js轮播图有左右箭头和小点
31 1
|
2月前
|
JavaScript 前端开发
网页前端课程设计-【模仿】香港中文大学官网,轮播图及div+css布局,js的dom操作
这篇文章介绍了如何模仿香港中文大学官网进行网页前端课程设计,包括使用div+css布局、js的DOM操作以及实现轮播图等技术细节。
|
3月前
|
JavaScript
js轮播图制作
js轮播图制作
34 1
|
3月前
|
JavaScript
js轮播图功能
js轮播图功能
21 0
|
3月前
|
前端开发 JavaScript
如何使用JavaScript制作轮播图
如何使用JavaScript制作轮播图
27 0
|
3月前
|
JavaScript
js之简单轮播图
js之简单轮播图
37 0
|
5月前
|
安全 JavaScript
旋转木马轮播图 html+css+js
旋转木马轮播图 html+css+js
|
5月前
|
机器学习/深度学习 JavaScript 前端开发
一篇文章讲明白JS左右轮播图的制作思路
一篇文章讲明白JS左右轮播图的制作思路
38 0