博客列表 >轮播图制作0718

轮播图制作0718

简简单单的博客
简简单单的博客原创
2019年07月20日 16:04:55752浏览

实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        ul,li {
            margin: 0;
            padding: 0;
            list-style: none;
        }
        .box {
            /*定位父级*/
            position: relative;
            width: 400px;
            height: 200px;
            margin: 0 auto;
        }

        .box .slider {
            width: 400px;
            height: 200px;
            display: none;
        }

        .box .slider.active{
            display: block;
        }

        .box .point-list {
            position: absolute;
            /*绝对定位的环境下的水平居中方式*/
            left: 50%;
            margin-left: -38px;
            top: 170px;
        }



        .box .point-list .point {
            display: inline-block;
            width: 12px;
            height: 12px;
            margin: 0 5px;
            background-color: white;
            border-radius: 100%;
        }

        .box .point-list .point.active {
            background-color: black;
        }

        .box .point-list .point:hover {
            cursor: pointer;
        }


        .skip {
            position: absolute;
            top: 70px;
            display: inline-block;
            width: 40px;
            height: 80px;
            text-align: center;
            line-height: 80px;
            background-color: lightgray;
            color: white;
            opacity: 0.2;
            font-size: 36px;
        }
        .box .prev{
            left: 0;
        }

        .box .next{
            right: 0;
        }

        .box .skip:hover {
            cursor: pointer;
            opacity: 0.5;
            color: black;
        }
    </style>
</head>
<body>
<div class="box">
    <img src="http://www.oufanxi.com/benner1.jpg" alt="" data-index="1" class="slider active">
    <img src="http://www.oufanxi.com/benner2.jpg" alt="" data-index="2" class="slider">
    <img src="http://www.oufanxi.com/benner3.jpg" alt="" data-index="3" class="slider">
    <div class="point-list">
        <span class="point active" data-index="1"></span>
        <span class="point" data-index="2"></span>
        <span class="point" data-index="3"></span>
    </div>
    <div>
        <span class="skip prev"></span>
        <span class="skip next"></span>
    </div>
    <script>    
// 设置小圆点的数量与样式, 与图片的数量关联,实现每添加一张图, 小圆点数量自动更新    
var imgs = document.images;    
// 将图片列表由HTML集合转为真正的数组类型    
var imgArr = Array.prototype.slice.call(imgs, 0);    
// 获取小圆点的父节点    
var pointList = document.getElementsByClassName('point-list').item(0);    
imgArr.forEach(function (img, index) {    
var span = document.createElement('span');    
if (index === 0) {    
span.classList.add('point','active')    
}    
span.classList.add('point');    
span.dataset.index = img.dataset.index;    
pointList.appendChild(span);    
});    
// 为小圆点设置点击事件,切换图片    
// 获取所有的小圆点    
var points = document.getElementsByClassName('point');    
// 将小圆点的html集合, 转为真正的数组    
var pointArr = Array.prototype.slice.call(points, 0);    
// 循环给小圆点添加点击事件    
pointArr.forEach(function (point){    
point.addEventListener('click', setImgActive, false);    
});    
// 设置图片切换    
function setImgActive(ev) {    
imgArr.forEach(function (img) {    
// 根据小圆点的data-index值与图片data-index对应关系来确定需要切换的图片    
if (img.dataset.index === ev.target.dataset.index) {    
// 去掉原来所有图片上的激活样式    
imgArr.forEach(function (img) { img.classList.remove('active') });    
// 设置当前图片为显示激活状态    
img.classList.add('active');    
// 设置小圆点的当前激活与高亮状态    
setPointActive(img.dataset.index);    
}    
});    
}    
// 翻页跳转按钮    
var skip = document.getElementsByClassName('skip');    
// 为翻页按钮添加事件    
skip.item(0).addEventListener('click', skipImg, false);    
skip.item(1).addEventListener('click', skipImg, false);    
function skipImg(ev) {    
// 获取当前正在显示的图片    
var currentImg = null;    
imgArr.forEach(function (img) {    
if (img.classList.contains('active')) {    
currentImg = img;    
}    
});    
// 判断点击的是显示前一个图片    
if (ev.target.classList.contains('prev')) {    
// 显示前一个兄弟元素节点    
currentImg.classList.remove('active');    
currentImg = currentImg.previousElementSibling;    
if (currentImg !== null && currentImg.nodeName === 'IMG') {    
// 高亮前一个兄弟节点图片    
currentImg.classList.add('active');    
} else {    
// 如果不存在前一个兄弟节点,则显示最后一个,以此来循环显示    
// 高亮最后一个兄弟节点图片    
currentImg = imgArr[imgArr.length-1];    
currentImg.classList.add('active');    
}    
}    
// 判断是否是点击了显示后一个图片    
if (ev.target.classList.contains('next')) {    
// 移除当前图片高亮, 不要再显示    
currentImg.classList.remove('active');    
// 更新当前图片节点    
currentImg = currentImg.nextElementSibling;    
// 显示后一个兄弟元素节点    
if (currentImg !== null && currentImg.nodeName === 'IMG') {    
// 高亮前一个兄弟节点图片    
currentImg.classList.add('active');    
} else {    
// 如果不存在前一个兄弟节点,则显示最后一个,以此来循环显示    
// 高亮第一个兄弟节点图片, 索引为0    
currentImg = imgArr[0];    
currentImg.classList.add('active');    
}    
}    
// 获取当前显示的图片的data-index    
var imgIndex = currentImg.dataset.index;    
setPointActive(imgIndex);    
}    
// 公共函数: 设置小圆点高亮    
function setPointActive(imgIndex) {    
// 清除小圆点原有的高亮    
pointArr.forEach(function (point) { point.classList.remove('active') });    
pointArr.forEach(function (point) {    
if (point.dataset.index === imgIndex)    
point.classList.add('active');    
});    
}    
var box = document.getElementsByClassName('box').item(0);    
// 创建定时器并初始化    
var timer = null;    
// 创建鼠标移动事件监听器    
// 1. 当鼠标移出轮播图区域时, 启动定时器控制轮播图的播放    
box.addEventListener('mouseout', startTimer, false);    
// 2. 当鼠标移入到轮播图区域时, 清除定时器,由用户点击来控制轮播图的播放    
box.addEventListener('mouseover',clearTimer, false);    
function startTimer() {    
// 事件模拟器    
var clickEvent = new Event('click');    
timer = setInterval(function () {    
skip.item(1).dispatchEvent(clickEvent);    
}, 3000);    
}    
function clearTimer() {    
clearInterval(timer);    
}    
</script>
</body>
</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议