HTML5 实现自动轮播_html5轮播图-程序员宅基地

技术标签: css  html5  javascript  

功能概要:

  1. 自动播放轮播图
  2. 点击左右移动轮播图
  3. 鼠标移入到标签上显示对应图片
  4. 移入停止轮播,左右按钮显示
  5. 移出左右按钮隐藏

效果图:

H5实现轮播图

原生 js 实现轮播图

  • html 代码:
<div class="all" id='box'>
	<div class="screen">
		<!--相框-->
		<ul>
			<li><img src="images/1.jpg" width="500" height="200" /></li>
			<li><img src="images/2.jpg" width="500" height="200" /></li>
			<li><img src="images/3.jpg" width="500" height="200" /></li>
			<li><img src="images/4.jpg" width="500" height="200" /></li>
			<li><img src="images/5.jpg" width="500" height="200" /></li>
		</ul>
		<ol>
		</ol>
	</div>
	<div id="arr"><span id="left">&lt;</span><span id="right">&gt;</span></div>
</div>
  • css 代码:
<style type="text/css">
	* {
		padding: 0;
		margin: 0;
		list-style: none;
		border: 0;
	}

	.all {
		width: 500px;
		height: 200px;
		padding: 7px;
		border: 1px solid #ccc;
		margin: 100px auto;
		position: relative;
	}

	.screen {
		width: 500px;
		height: 200px;
		overflow: hidden;
		position: relative;
	}

	.screen li {
		width: 500px;
		height: 200px;
		overflow: hidden;
		float: left;
	}

	.screen ul {
		position: absolute;
		left: 0;
		top: 0px;
		width: 3000px;
	}

	.all ol {
		position: absolute;
		right: 10px;
		bottom: 10px;
		line-height: 20px;
		text-align: center;
	}

	.all ol li {
		float: left;
		width: 20px;
		height: 20px;
		background: #fff;
		border: 1px solid #ccc;
		margin-left: 10px;
		cursor: pointer;
	}

	.all ol li.current {
		background: #DB192A;
	}

	#arr {
		display: none;
	}

	#arr span {
		width: 40px;
		height: 40px;
		position: absolute;
		left: 5px;
		top: 50%;
		margin-top: -20px;
		background: #000;
		cursor: pointer;
		line-height: 40px;
		text-align: center;
		font-weight: bold;
		font-family: '黑体';
		font-size: 30px;
		color: #fff;
		opacity: 0.3;
		border: 1px solid #fff;
	}

	#arr #right {
		right: 5px;
		left: auto;
	}
</style>
  • js 代码:
<script>
	//获取最外面的div
	var box = my$("box");
	//获取相框
	var screen = box.children[0];
	//获取相框的宽度
	var imgWidth = screen.offsetWidth;
	//获取ul
	var ulObj = screen.children[0];
	//获取ul中的所有的li
	var list = ulObj.children;
	//获取ol
	var olObj = screen.children[1];
	//焦点的div
	var arr = my$("arr");
	console.log(imgWidth)
	var pic = 0; //全局变量
	//创建小按钮----根据ul中的li个数
	for (var i = 0; i < list.length; i++) {
		//创建li标签,加入到ol中
		var liObj = document.createElement("li");
		olObj.appendChild(liObj);
		liObj.innerHTML = (i + 1);
		//在每个ol中的li标签上添加一个自定义属性,存储索引值
		liObj.setAttribute("index", i);
		//注册鼠标进入事件
		liObj.onmouseover = function() {
			//先干掉所有的ol中的li的背景颜色
			for (var j = 0; j < olObj.children.length; j++) {
				olObj.children[j].removeAttribute("class");
			}
			//设置当前鼠标进来的li的背景颜色
			this.className = "current";
			//获取鼠标进入的li的当前索引值
			pic = this.getAttribute("index");
			//移动ul
			animate(ulObj, -pic * imgWidth);
		};
	}
	//设置ol中第一个li有背景颜色
	olObj.children[0].className = "current";


	//克隆一个ul中第一个li,加入到ul中的最后=====克隆
	ulObj.appendChild(ulObj.children[0].cloneNode(true));

	//自动播放
	var timeId = setInterval(clickHandle, 1000);

	//鼠标进入到box的div显示左右焦点的div
	box.onmouseover = function() {
		arr.style.display = "block";
		//鼠标进入废掉之前的定时器
		clearInterval(timeId);
	};
	//鼠标离开到box的div隐藏左右焦点的div
	box.onmouseout = function() {
		arr.style.display = "none";
		//鼠标离开自动播放
		timeId = setInterval(clickHandle, 1000);
	};
	//右边按钮
	my$("right").onclick = clickHandle;

	function clickHandle() {
		//如果pic的值是5,恰巧是ul中li的个数-1的值,此时页面显示第六个图片,而用户会认为这是第一个图,
		//所以,如果用户再次点击按钮,用户应该看到第二个图片
		if (pic == list.length - 1) {
			//如何从第6个图,跳转到第一个图
			pic = 0; //先设置pic=0
			ulObj.style.left = 0 + "px"; //把ul的位置还原成开始的默认位置
		}
		pic++; //立刻设置pic加1,那么此时用户就会看到第二个图片了
		animate(ulObj, -pic * imgWidth); //pic从0的值加1之后,pic的值是1,然后ul移动出去一个图片
		//如果pic==5说明,此时显示第6个图(内容是第一张图片),第一个小按钮有颜色,
		if (pic == list.length - 1) {
			//第五个按钮颜色干掉
			olObj.children[olObj.children.length - 1].className = "";
			//第一个按钮颜色设置上
			olObj.children[0].className = "current";
		} else {
			//干掉所有的小按钮的背景颜色
			for (var i = 0; i < olObj.children.length; i++) {
				olObj.children[i].removeAttribute("class");
			}
			olObj.children[pic].className = "current";
		}

	};
	//左边按钮
	my$("left").onclick = function() {
		if (pic == 0) {
			pic = 5;
			ulObj.style.left = -pic * imgWidth + "px";
		}
		pic--;
		animate(ulObj, -pic * imgWidth);
		//设置小按钮的颜色---所有的小按钮干掉颜色
		for (var i = 0; i < olObj.children.length; i++) {
			olObj.children[i].removeAttribute("class");
		}
		//当前的pic索引对应的按钮设置颜色
		olObj.children[pic].className = "current";
	};

	//设置任意的一个元素,移动到指定的目标位置
	function animate(element, target) {
		clearInterval(element.timeId);
		//定时器的id值存储到对象的一个属性中
		element.timeId = setInterval(function() {
			//获取元素的当前的位置,数字类型
			var current = element.offsetLeft;
			//每次移动的距离
			var step = 10;
			step = current < target ? step : -step;
			//当前移动到位置
			current += step;
			if (Math.abs(current - target) > Math.abs(step)) {
				element.style.left = current + "px";
			} else {
				//清理定时器
				clearInterval(element.timeId);
				//直接到达目标
				element.style.left = target + "px";
			}
		}, 10);
	}
</script>

使用 swiper 插件实现自动轮播

1. 安装 swiper 包

先在命令行 cd 到项目中

cd 项目名

需要在后面加版本号

npm i swiper@3

在 package.json 中查看是否安装成功

2. 在页面中引入 swiper 代码

在 HTML 中引入代码

// 引入 css 样式
<link rel="stylesheet" href="./swiper-5.4.1/package/css/swiper.min.css">
// 引入 js 样式
<script src="./swiper-5.4.1/package/js/swiper.min.js"></script>

在 vue 中引入代码

import Swiper from "swiper";
import "swiper/css/swiper.min.css";

3. swiper 代码的使用

html 代码:

<div class="swiper-container">
  <div class="swiper-wrapper">
    <div class="swiper-slide">
      <img
        src="https://img.js.design/assets/img/622ff0e327d2c84efaddac81.png"
      />
    </div>
    <div class="swiper-slide">
      <img
        src="https://img.js.design/assets/img/622ff0e327d2c84efaddac81.png"
      />
    </div>
  </div>
  <!-- 如果需要分页器 -->
  <div class="swiper-pagination"></div>
  //前进后退
  <div class="swiper-button-next"></div>
  <div class="swiper-button-prev"></div>
  //滚动条
  <div class="swiper-scrollbar"></div>
</div>

js 代码:

new Swiper(".swiper-container", {
  // 循环模式选项
  loop: true,
  // 自动播放
  autoplay: true,
  // 如果需要分页器
  pagination: {
    // 分页器与哪个标签关联
    el: ".swiper-pagination",
    // 分页器是否可以点击
    clickable: true,
    bulletClass: "my-bullt-class",
    bulletActiveClass: "my-bullet-active",
  },
  // 如果需要前进后退按钮
  navigation: {
    nextEl: '.swiper-button-next',
    prevEl: '.swiper-button-prev',
  },
  
  // 如果需要滚动条
  scrollbar: {
    el: '.swiper-scrollbar',
  },
});

css 代码:

.swiper-container {
  margin: 0 0.15rem;
  margin-top: 0.12rem;
  border-radius: 0.08rem;
  box-shadow: 0px 0.03rem 0.06rem rgba(178, 178, 178, 0.63);
  .swiper-slide {
    height: 1.72rem;
    img {
      height: 1.72rem;
      border-radius: 0.08rem;
    }
  }
}

除此之外要是想要有更多的轮播图样式可以去swiper官网进行查阅:https://swiper.com.cn/

使用 element-ui 插件实现自动轮播

1. 安装 element-ui 插件

npm i element-ui

2. 在页面中引入 element-ui 插件

vue 中引入方法

import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import "./assets/css/index.styl";
import "./assets/css/over-write.styl";
Vue.use(ElementUI);

html 中引入方法

<!-- 引入样式 -->
<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
<!-- 引入组件库 -->
<script src="https://unpkg.com/element-ui/lib/index.js"></script>

具体代码在 element-ui 官网进行查阅:https://element.eleme.cn/#/zh-CN/component/carousel


以上就是 HTML 中实现自动轮播代码思路,不懂得也可以在评论区里问我,以后会持续发布一些新的功能,敬请关注。
我的其他文章:https://blog.csdn.net/weixin_62897746?type=blog

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_62897746/article/details/127608946

智能推荐

JS(JavaScript)详解-程序员宅基地

文章浏览阅读7k次,点赞7次,收藏37次。JavaScript是由Netscape(网景)公司研发出来的一种在它的Navigator浏览器上执行的程序语言。JavaScript是一种基于对象(object-based)和事件驱动(Event Driven)的简单的并具有安全性能的脚本语言。JavaScript组成ECMAScript:JavaScript的核心,语法格式,使用方法文档对象模型(DOM,document object model):DOM(文档对象模型)是 HTML 和 XML 的应用程序接口(API)。_js

最好用的caffe深度学习简单批处理数据集(windows+linux+Python)_win linux 深度学习 数据集-程序员宅基地

文章浏览阅读395次。简单的批处理方式,包含了windows系统下的bat文件,Linux系统下的sh文件以及最牛逼的Python脚本。在进行AI相关的研究时,不可避免的需要去进行处理数据集。有些数据集是现成的,有些数据集却是需要自己去定制的。以下是自己在学习的过程中总结出来的比较常见的几种方式去处理数据。因为做的是CV,所以设计的处理方式多是处理图片。一、windows下的bat1、统计每个文件夹的名称以及相应文..._win linux 深度学习 数据集

8hutool实战:ChineseDate(农历日期工具类)_hutool chinesedate-程序员宅基地

文章浏览阅读1.3w次,点赞17次,收藏9次。hutool实战:农历日期工具,最大支持到2055年,支持:- 通过公历日期构造获取对应农历- 通过农历日期直接构造关键字:java java JAVA hutool hutool Hutool 工具类 工具类 工具类 DateUtil DateUtil DateUtil_hutool chinesedate

30道python自动化测试面试题-程序员宅基地

文章浏览阅读1.4w次,点赞28次,收藏405次。30道python自动化测试面试题,让你的面试过程比德芙还丝滑~_python自动化测试面试题

vi光标移动_vi移动光标-程序员宅基地

文章浏览阅读3.4k次。hjkl,前后左右,加数字代表重复执行,如3j表示下移3行^:移动光标到行首;$:移动光标到行尾;ctrl-b: 上翻一页ctrl-f:下翻一页_vi移动光标

一文带你通俗理解23种软件设计模式(推荐收藏,适合小白学习,附带C++例程完整源码)-程序员宅基地

文章浏览阅读4.3w次,点赞33次,收藏236次。一文带你通俗理解23种软件设计模式(推荐收藏,适合小白学习,附带C++例程完整源码)_软件设计模式

随便推点

matlab区间非等长分隔,离散数据自适应区间划分优化问题-程序员宅基地

文章浏览阅读689次。原有260个样本点,我分为Num_QuJian=10 段,如果RMS太大,则再分为20段,主要是这个意思。clc;clear allformat longglobal Num_QuJian %%% 大于等于2 整个区间划分为n段Num_QuJian=10global QuJian fmaxQuJian=260;global V_O m RMSV_O=[];%%%%生成约束 AX<=..._matlab 划分区间

关于生产者消费者模式的C#实现_c#生产者消费者模式-程序员宅基地

文章浏览阅读9.7k次,点赞14次,收藏83次。今天是圣诞节,大家 Merry Chrismas~以前都是在C++项目中写界面,现在接触了C#感觉比MFC和QT好用多了,决定以后除了特殊要求外都用C#开发:)。记录一下用C#实现生产者消费者模式吧。先介绍一下这个模式,简而言之就是生产者(可能有数个)生产东西,消费者(可能有数个)消费前面生产的东西。举个生活中的例子就是苹果有好几个厂家(生产者)生产iphone,线下线上的购买者(消费者)通过..._c#生产者消费者模式

如何在linux搭建airtest+chromeweb测试环境--(用命令行运行.air脚本)-程序员宅基地

文章浏览阅读806次。大前堤:如果你需要airtest提供的可视化测试报告,那你的操作系统,一定要有图形化界面.否则运行你的airtest脚本 会遇到这样的问题Xlib.error.DisplayNameError: Bad display name ""你可能百度之后 遇到了xhost +命令执行这个命令后,再运行测试脚本,又遇到这个问题然后再百度,原来.Xauthority X..._linux +airtest

ros介绍-程序员宅基地

文章浏览阅读1.5k次。ROS是什么?ROS 历史起源ROS 发展背景问题:机器人跨学科特点,系统庞大,工程应用涉及面广,硬件繁多,软件开发困难、低级重复基础:机器人研究相关领域发展迅速:计算机视觉,异构计算加速,室内移动机器人算法的成熟等等需求:机器人研究过程中需要统一开发/测试平台解决方法:机器人软件中间件ROS总体设计一个目标提高机器人开发中的代码复用率五个特点免费且开源BSD许..._ros

Faster R-CNN roi_pooling_layer 浅析_psroi_pooling_layer not implemented yet-程序员宅基地

文章浏览阅读3.3k次。阅读完 R-CNN一系列论文之后,开始看源代码。本文简要记录自己对roi_pooling_layer源码的理解。作者首先在caffe.proto中添加该层参数说明,主要是三个变量 optional ROIPoolingParameter roi_pooling_param = 43; message ROIPoolingParameter {// Pad, kernel size, and str_psroi_pooling_layer not implemented yet