html+css手搓轮播图(附源码)
预览效果源码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
padding: 0;
margin: 0;
}
#slideshow {
width: 800px;
height: 350px;
margin: 0 auto;
/*设置在页面水平居中*/
overflow: hidden;
position: relative;
}
#slideshow img {
width: 800px;
position: absolute;
/*图片采取绝对定位,均位于左上角,重叠在一起*/
top: 0;
left: 0;
opacity: 0;
/*初始不透明度为0,图片都看不见*/
transition: opacity 1s linear;
/*--重点--定义一个关于透明度的transition*/
}
#slideshow img.active {
opacity: 1;
/*有active类的图片不透明度为1,即显示图片*/
}
/*-- 设置页码的样式 --*/
#slideshow div {
width: 100%;
position: absolute;
bottom: 10px;
text-align: center;
}
#slideshow span {
display: inline-block;
width: 25px;
line-height: 25px;
/*当只有一行文本时height等于line-height*/
border-radius: 25px;
/*设置页码为圆形*/
margin: 0 15px;
background: white;
font-size: 16px;
}
#slideshow span.active {
color: white;
background: #FFDD55;
}
/*-- 设置图片描述文本的样式 --*/
#slideshow p {
position: absolute;
top: 30px;
left: -400px;
/*相对于轮播图左侧左移400px*/
line-height: 30px;
padding: 5px 30px;
font-size: 20px;
color: white;
background-color: rgba(100, 100, 100, 0.6);
/*用rgba设置一个带透明度的背景颜色*/
opacity: 0;
transition: all 0.5s;
}
#slideshow p.active {
left: 0;
opacity: 1;
}
</style>
</head>
<body>
<div id="slideshow">
<!-- 插入轮播的图片们 -->
<img class="active" src="https://images.unsplash.com/photo-1730722005859-f93a79460bae?q=80&w=1974&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D" />
<img src="https://image2.sina.com.cn/dongman/pic/chshidzrcji/U1595P55T4D115697F50DT20070406083109.jpeg" />
<img src="http://t1.mmonly.cc/uploads/tu/201602/198/qh1spjs3guk.jpg" />
<!-- 插入轮播的页码们 -->
<div>
<span class="active">1</span>
<span>2</span>
<span>3</span>
</div>
<!-- 插入图片的描述们 -->
<p class="active">这是第一幅图片哈哈哈</p>
<p>这是第二幅图片咩</p>
<p>到第三幅了!</p>
</div>
<script>
//---------主角:轮播图函数-------------
function slideshow() {
var slideshow = document.getElementById("slideshow"),
imgs = slideshow.getElementsByTagName("img"), //得到图片们
pages = slideshow.getElementsByTagName("span"), //得到页码们
descrips = slideshow.getElementsByTagName("p"), //得到描述们
current = 0; //current为当前活跃的图片编号
function slideOff() {
imgs.className = ""; //图片淡出
pages.className = "";
descrips.className = "";
}
function slideOn() {
imgs.className = "active"; //图片淡入
pages.className = "active";
descrips.className = "active";
}
function changeSlide() { //切换图片的函数
slideOff();
current++; //自增1
if (current >= 3) current = 0;
slideOn();
}
//每2s调用changeSlide函数进行图片轮播
var slideon = setInterval(changeSlide, 2000);
slideshow.onmouseover = function () {
clearInterval(slideon); //当鼠标移入时清除轮播事件
}
slideshow.onmouseout = function () {
slideon = setInterval(changeSlide, 2000); //当鼠标移出时重新开始轮播事件
}
for (var i = 0; i < pages.length; i++) { //定义鼠标移入和移出页码事件
pages.onmouseover = function () {
slideOff(); //图片淡出
current = this.innerHTML - 1; //得到鼠标停留的页码对应的current
slideOn(); //图片淡出
}
}
}
slideshow();
</script>
</body>
</html>源码解释
这段代码是一个简单的图片轮播图的HTML页面,它使用了HTML、CSS和JavaScript来实现图片的自动轮播和手动切换功能。下面是代码的详细解释:
HTML部分:
<div id="slideshow">:定义了轮播图的容器。
<img>标签:包含了三张图片,其中第一张图片被设置为初始显示(class="active")。
<div>和<span>标签:用于显示页码,其中第一个页码被设置为初始活动状态(class="active")。
<p>标签:用于显示每张图片的描述,其中第一个描述被设置为初始活动状态(class="active")。
CSS部分:
设置了页面的基本样式,如padding和margin都被设置为0。
#slideshow:定义了轮播图容器的样式,包括宽度、高度、溢出隐藏和相对定位。
#slideshow img:设置了图片的样式,包括宽度、绝对定位、初始透明度和过渡效果。
#slideshow img.active:当图片具有active类时,透明度变为1,使其可见。
#slideshow div和#slideshow span:定义了页码的样式,包括宽度、位置、文本对齐和圆形外观。
#slideshow span.active:当页码具有active类时,背景颜色改变。
#slideshow p:定义了图片描述的样式,包括位置、行高、填充、字体大小和背景颜色。
#slideshow p.active:当描述具有active类时,位置和透明度改变,使其可见。
JavaScript部分:
定义了一个slideshow函数,用于控制图片的轮播。
slideOff函数:用于将当前图片、页码和描述的样式设置为非活动状态。
slideOn函数:用于将当前图片、页码和描述的样式设置为活动状态。
changeSlide函数:用于切换到下一张图片,如果到达最后一张图片,则回到第一张。
设置了一个定时器setInterval,每2秒调用一次changeSlide函数。
当鼠标移入轮播图时,清除定时器,停止自动轮播;鼠标移出时,重新开始定时器。
为每个页码绑定了鼠标移入事件,当鼠标移入某个页码时,切换到对应的图片。
这段代码实现了一个基本的图片轮播功能,包括自动轮播、鼠标悬停暂停、手动切换图片和显示图片描述。
页:
[1]