零基础也能学会,原生JS实现图片轮播(附源码,拿去即用)

简介: 笔记

1. 项目效果图


  • 技术栈(原生JS),真正高端的效果往往只需要简单质朴的JS就能实现
  • 可以点击左右箭头切换图片
  • 鼠标悬浮在数字上也可切换图片
  • 设置了定时器,会自动轮播
  • 用到了animate,效果非常丝滑20.png

2. 基础布局(index.html)


  • 这里非常简单,不做过多解释
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>轮播图</title>
        <link rel="stylesheet" type="text/css" href="./index.css"  />
        <style>
        </style>
    </head>
    <body>
        <h1>原生JS实现轮播图</h1>
        <div id="box" class="all">
            <div class="inner"> <!-- 相框-->
             <ul>
                <li><a href="#"><img src="img/1.jpg" width="550" height="320" alt=""></a></li>
                <li><a href="#"><img src="img/2.jpg" width="550" height="320" alt=""></a></li>
                <li><a href="#"><img src="img/3.jpg" width="550" height="320" alt=""></a></li>
                <li><a href="#"><img src="img/4.jpg" width="550" height="320" alt=""></a></li>
             </ul>
             <ol> <!--里面存放小圆点-->
             </ol>
            </div>
            <div class="focusD" id="arr">
             <span id="left"><</span>
             <span id="right">></span>
            </div>
        </div>
    </body>  
    <script src="./index.js"></script>    
</html>

3. CSS 样式(index.css)


* {
    margin: 0;
    padding: 0;
   }
   h1{
       text-align: center;
       margin-top: 150px;
   }
   /*<--清除底部三像素距离-->*/
   img {
    vertical-align: top;
   }
   .all {
    width: 550px;
    height: 320px;
    margin: 100px auto;
    padding: 5px;
    border: 1px solid #ccc;
    position: relative;
   }
   .inner {
    position: relative;
    width: 550px;
    height: 320px;
    background-color: pink;
    overflow: hidden;
   }
   .inner ul {
    width: 1000%;
    list-style: none;
    position: absolute;
    top: 0;
    left: 0;
   }
   .inner ul li {
    float: left;
   }
   .focusD {
    position: absolute;
    left: 0;
    top: 50%;
    width: 550px;
    padding: 0 10px;
    height: 30px;
    box-sizing: border-box;
    display: none;
   }
   .inner ol {
    position: absolute;
    right: 30px;
    bottom: 10px;
   }
   .inner ol li {
    width: 15px;
    display: inline-block;
    height: 15px;
    margin: 0 3px;
    cursor: pointer;
    line-height: 15px;
    text-align: center;
    background-color: #fff;
   }
   /*当前的高亮的小圆点*/
   .inner ol .current {
    background-color: orange;
    color: #fff;
   }
   .focusD span {
    display: inline-block;
    width: 25px;
    font-size: 24px;
    height: 30px;
    color: #ccc;
    line-height: 30px;
    text-align: center;
    background: rgba(255, 255, 255, 0.3);
    cursor: pointer;
   }
   #left {
    float: left;
   }
   #right {
    float: right;
 }

4. JS部分(做了详细注释)


4.1 获取需要操作的元素

let index=0;
//获取最外面的div
let box = my$("box");
//获取相框
let inner = box.children[0];
//获取去相框的宽度
let imgWidth = inner.offsetWidth;
// 获取ul
let ulObj = inner.children[0];
//获取ul中所有的li
let list = ulObj.children;
//获取ol
let olObj = inner.children[1];
//获取焦点
let arr = my$("arr");

4.2 创建小圆点,及设置背景色

 //创建小按钮-----根据ul中li的个数
 for (let i = 0; i < list.length; i++) {
  let liObjs = document.createElement("li");
  olObj.appendChild(liObjs);
  liObjs.innerHTML = (i + 1);
  //在ol中每个li中增加自定义属性,添加索引值
  liObjs.setAttribute("index", i);
  //注册鼠标进入事件
  liObjs.onmouseover = function () {
   //先干掉所有背景颜色
   for (let j = 0; j < olObj.children.length; j++) {
    olObj.children[j].removeAttribute("class");
   }
   //设置当前鼠标进来的类样式
   this.className = "current";
   //获取ol中li的索引值
    index = this.getAttribute("index");
   //移动ul
   animate(ulObj, -index * imgWidth); //移动动画函数
  };
 }
 //设置第一个ol中li的背景颜色
 olObj.children[0].className = "current";
 //克隆ol中第一个li放到最后一个
 ulObj.appendChild(ulObj.children[0].cloneNode(true));

4.3 设置定时器(定时轮播)

 let timeId=setInterval(clickHandle,3000);
 my$("box").onmouseover=function(){
  arr.style.display="block";
  clearInterval(timeId);
 };

4.4 绑定左右箭头点击事件

 //点击右边按钮
  my$("right").onclick=clickHandle;
  function clickHandle() {
   if (index==ulObj.children.length-1){
    ulObj.style.left=0+"px";
    index=0;
   }
   index++;
   animate(ulObj,-index*imgWidth);
   if (index==list.length-1){
    olObj.children[0].className="current";
    olObj.children[olObj.children.length-1].className="";
   }else {
    for (let i=0;i<olObj.children.length;i++){
     olObj.children[i].className="";
    }
    olObj.children[index].className="current";
   }
  };
  //点击左边按钮
  my$("left").onclick=function () {
   if (index==0){
    index=list.length-1;
    ulObj.style.left=-index*imgWidth+"px";
   }
   index--;
   animate(ulObj,-index*imgWidth);
   for (let i=0;i<olObj.children.length;i++){
    olObj.children[i].className="";
   }
   olObj.children[index].className="current";
  };
 my$("box").onmouseout=function(){
  arr.style.display="none";
  timeId=setInterval(clickHandle,3000);
 };
 // 设置一个元素,移动到指定位置
 function animate(element, target) {
  clearInterval(element.timeId);
  element.timeId = setInterval(function () {
   let current = element.offsetLeft;
   let step = 9;
   step = current > target ? -step : step;
   current += step;
   if (Math.abs(target - current) > Math.abs(step)) {
    element.style.left = current + "px";
   } else {
    clearInterval(element.timeId);
    element.style.left = target + "px";
   }
  }, 10);
 }
function my$(id) {
    return document.getElementById(id);
}

5. FAQ


  • 注意各文件引入路径
  • 需要自己找几张图片
  • JS文件一个就可,将所有JS按本文顺序放一起就行
目录
相关文章
|
1月前
|
JavaScript
JS实现简单的打地鼠小游戏源码
这是一款基于JS实现简单的打地鼠小游戏源码。画面中的九宫格中随机出现一个地鼠,玩家移动并点击鼠标控制画面中的锤子打地鼠。打中地鼠会出现卡通爆破效果。同时左上角统计打地鼠获得的分数
70 1
|
12天前
|
Web App开发 移动开发 HTML5
html5 + Three.js 3D风雪封印在棱镜中的梅花鹿动效源码
html5 + Three.js 3D风雪封印在棱镜中的梅花鹿动效源码。画面中心是悬浮于空的梅花鹿,其四周由白色线段组成了一个6边形将中心的梅花鹿包裹其中。四周漂浮的白雪随着多边形的转动而同步旋转。建议使用支持HTML5与css3效果较好的火狐(Firefox)或谷歌(Chrome)等浏览器预览本源码。
42 2
|
1月前
ractive.js联系表单动画效果源码
一款ractive.js联系表单动画效果,很有创意的发送邮件、联系内容等表单,基于ractive.js实现的动画效果,以发送信件的方式。
24 1
|
1月前
|
前端开发 JavaScript
用HTML CSS JS打造企业级官网 —— 源码直接可用
必看!用HTML+CSS+JS打造企业级官网-源码直接可用,文章代码仅用于学习,禁止用于商业
124 1
|
1月前
|
JavaScript
JS趣味打字金鱼小游戏特效源码
hi fish是一款打字趣味小游戏,捞出海里的鱼,捞的越多越好。这款游戏用于电脑初学者练习打字。初学者可以根据自己的水平设置游戏难度。本段代码可以在各个网页使用,有需要的朋友可以直接下载使用,本段代码兼容目前最新的各类主流浏览器,是一款非常优秀的特效源码!
32 3
|
1月前
|
JavaScript
JS鼠标框选并删除HTML源码
这是一个js鼠标框选效果,可实现鼠标右击出现框选效果的功能。右击鼠标可拖拽框选元素,向下拖拽可实现删除效果,简单实用,欢迎下载
42 4
|
1月前
|
JavaScript
js实现简洁实用的网页计算器功能源码
这是一款使用js实现简洁实用的网页计算器功能源码。可实现比较基本的加减乘除四则运算功能,界面简洁实用,是一款比较基本的js运算功能源码。该源码可兼容目前最新的各类主流浏览器。
24 2
|
1月前
|
JavaScript
JS实现的虚化雪景动态背景特效源码
JS实现的虚化雪景动态背景特效源码是一段基于JS实现的虚化雪景动态背景动画效果代码,非常有意思,欢迎对此特效感兴趣的朋友前来下载参考。
38 4
|
1月前
|
移动开发 前端开发 JavaScript
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
于辰在大学期间带领团队参考网易游戏官网的部分游戏页面,开发了一系列前端实训作品。项目包括首页、2021校园招聘页面和明日之后游戏页面,涉及多种特效实现,如动态图片切换和人物聚合效果。作品源码已上传至CSDN,视频效果可在CSDN预览。
40 0
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
|
1月前
|
移动开发 HTML5
html5+three.js公路开车小游戏源码
html5公路开车小游戏是一款html5基于three.js制作的汽车开车小游戏源代码,在公路上开车网页小游戏源代码。
57 0
html5+three.js公路开车小游戏源码