百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

web前端必学功法之一:轮播图

bigegpt 2024-08-20 11:15 2 浏览

## web前端必学功法之一:轮播图

效果演示:

![在这里插入图片描述](https://img-blog.csdnimg.cn/759c3e77fb82483892b9ce0413540095.gif#pic_center)

```css

<style>

* {

margin: 0;

padding: 0;

}

/* 去除a标签的下划线 */

a {

text-decoration: none;

}

.container {

position: relative;

width: 600px;

height: 400px;

margin: 100px auto 0 auto;

box-shadow: 0 0 5px mediumpurple;

overflow: hidden;

}

.wrap {

position: absolute;

width: 4200px;

height: 400px;

z-index: 1;

}

.container .wrap img {

float: left;

width: 600px;

height: 400px;

}

.container .buttons {

position: absolute;

right: 150px;

bottom: 20px;

width: 200px;

height: 10px;

z-index: 2;

}

.container .buttons span {

margin-left: 5px;

display: inline-block;

width: 20px;

height: 20px;

line-height: 20px;

border-radius: 50px;

background-color: mediumslateblue;

color: white;

cursor: pointer;

text-align: center;

}

.container .buttons span.on {

background-color: red;

}

.container .arrow {

position: absolute;

top: 36%;

color: mediumpurple;

padding: 0 12px;

border-radius: 50%;

font-size: 50px;

z-index: 2;

}

.container .arrow_left {

left: 10px;

}

.container .arrow_right {

right: 10px;

}

.container .arrow:hover {

background-color: rgba(0, 0, 0, 0.3);

}

</style>

```

```html

<div class="container">

<!-- 图片区域 -->

<div class="wrap" style="left:-600px;">

<img src="img/1.jpg" />

<img src="img/2.jpg" />

<img src="img/3.jpg" />

<img src="img/4.jpg" />

<img src="img/5.jpg" />

<img src="img/6.jpg" />

<img src="img/7.jpg" />

</div>

<!-- 圆点 -->

<div class="buttons">

<span id="1">1</span>

<span id="2">2</span>

<span id="3">3</span>

<span id="4">4</span>

<span id="5">5</span>


</div>

<!-- 左右控制按钮 -->

<a href="javascript:void(0)" class="arrow arrow_left" onclick="preImg()"><</a>

<a href="javascript:void(0)" class="arrow arrow_right" onclick="nextImg()">></a>

</div>

```

```javascript

<script>

var wrap = document.querySelector(".wrap");

var newLeft;

// 上一张

function preImg() {

// 判断当前图片是否为最后一张

if (wrap.style.left === "-3600px") {

newLeft = -1200; //是为最后一张就回到最前面一张


} else {

newLeft = parseInt(wrap.style.left) - 600 //不是就到上一张,因为当前wrap.style.left值是个字符串,所以就需要parseInt()

}

wrap.style.left = newLeft + "px"; // 新位置的值

index--; //上一张,每次图标就减去1

if(index < 0){ //index最小为0

index = 4;

}

showCurrentDot();

}

// 下一张

function nextImg() {

// 判断当前图片是否为最后一张

if (wrap.style.left === "0px") {

newLeft = -2400; //是为最后一张,就回到第一张

} else {

newLeft = parseInt(wrap.style.left) + 600 //不是第一张就继续下一张,因为当前wrap.style.left值是个字符串,所以就需要parseInt()

}

wrap.style.left = newLeft + "px"; // 新位置的值

index++; //下一张,每次图标就加1

if(index > 4){ //index大于4 ,说明到了最后一张

index = 0;

}

showCurrentDot();

}

// 自动播放

var timer;

function autoPlay(){

//定时两秒执行一次,下一章 方法调用

timer = setInterval(function(){

nextImg();

},2000)

}

autoPlay();


// 鼠标悬停时,停止图片轮播


// 找到当前容器,绑定一个onmouserover

document.querySelector(".container").onmouseover = function(){

//清除定时任务

clearInterval(timer);

}

//鼠标离开时,开始轮播图片

document.querySelector(".container").onmouseleave = function(){

//自动播放

autoPlay();

}


//显示小圆点

var index = 0;

var dots = document.getElementsByTagName("span"); //获取所有的小圆点

function showCurrentDot(){

for(var i = 0; i < dots.length; i++){

//设置圆点不选中

dots[i].className = "";

}

//将当前所在位置的图片对应的小圆点选中

dots[index].className = "on";

}

showCurrentDot();

//点击小圆点事件

for(var i = 0; i< dots.length; i++){

//绑定点击事件

dots[i].onclick = function(){

//获取点击的圆点的位置(id属性值)

var dis = this.id;


//设置wrap的left值

wrap.style.left = -(dis * 600) + "px";

//设置红点位置

index = dis - 1; //dis是从1开始的,但是索引是从0开始的,所以要减少1

showCurrentDot();

}

}

</script>

```

## 轮播图总结

1.这里使用5个小圆点,用7张图片来轮播,是为了实现无缝轮播,这样看起来效果比较好一点

2.它的原理:就是将图片在一行中进行平铺,把所有的图片平铺在页面中,然后进行计算偏移量,再利用定时器,定时轮播

3.布局很重要。是成功的第一步。

相关推荐

悠悠万事,吃饭为大(悠悠万事吃饭为大,什么意思)

新媒体编辑:杜岷赵蕾初审:程秀娟审核:汤小俊审签:周星...

高铁扒门事件升级版!婚宴上‘冲喜’老人团:我们抢的是社会资源

凌晨两点改方案时,突然收到婚庆团队发来的视频——胶东某酒店宴会厅,三个穿大红棉袄的中年妇女跟敢死队似的往前冲,眼瞅着就要扑到新娘的高额钻石项链上。要不是门口小伙及时阻拦,这婚礼造型团队熬了三个月的方案...

微服务架构实战:商家管理后台与sso设计,SSO客户端设计

SSO客户端设计下面通过模块merchant-security对SSO客户端安全认证部分的实现进行封装,以便各个接入SSO的客户端应用进行引用。安全认证的项目管理配置SSO客户端安全认证的项目管理使...

还在为 Spring Boot 配置类加载机制困惑?一文为你彻底解惑

在当今微服务架构盛行、项目复杂度不断攀升的开发环境下,SpringBoot作为Java后端开发的主流框架,无疑是我们手中的得力武器。然而,当我们在享受其自动配置带来的便捷时,是否曾被配置类加载...

Seata源码—6.Seata AT模式的数据源代理二

大纲1.Seata的Resource资源接口源码2.Seata数据源连接池代理的实现源码3.Client向Server发起注册RM的源码4.Client向Server注册RM时的交互源码5.数据源连接...

30分钟了解K8S(30分钟了解微积分)

微服务演进方向o面向分布式设计(Distribution):容器、微服务、API驱动的开发;o面向配置设计(Configuration):一个镜像,多个环境配置;o面向韧性设计(Resista...

SpringBoot条件化配置(@Conditional)全面解析与实战指南

一、条件化配置基础概念1.1什么是条件化配置条件化配置是Spring框架提供的一种基于特定条件来决定是否注册Bean或加载配置的机制。在SpringBoot中,这一机制通过@Conditional...

一招解决所有依赖冲突(克服依赖)

背景介绍最近遇到了这样一个问题,我们有一个jar包common-tool,作为基础工具包,被各个项目在引用。突然某一天发现日志很多报错。一看是NoSuchMethodError,意思是Dis...

你读过Mybatis的源码?说说它用到了几种设计模式

学习设计模式时,很多人都有类似的困扰——明明概念背得滚瓜烂熟,一到写代码就完全想不起来怎么用。就像学了一堆游泳技巧,却从没下过水实践,很难真正掌握。其实理解一个知识点,就像看立体模型,单角度观察总...

golang对接阿里云私有Bucket上传图片、授权访问图片

1、为什么要设置私有bucket公共读写:互联网上任何用户都可以对该Bucket内的文件进行访问,并且向该Bucket写入数据。这有可能造成您数据的外泄以及费用激增,若被人恶意写入违法信息还可...

spring中的资源的加载(spring加载原理)

最近在网上看到有人问@ContextConfiguration("classpath:/bean.xml")中除了classpath这种还有其他的写法么,看他的意思是想从本地文件...

Android资源使用(android资源文件)

Android资源管理机制在Android的开发中,需要使用到各式各样的资源,这些资源往往是一些静态资源,比如位图,颜色,布局定义,用户界面使用到的字符串,动画等。这些资源统统放在项目的res/独立子...

如何深度理解mybatis?(如何深度理解康乐服务质量管理的5个维度)

深度自定义mybatis回顾mybatis的操作的核心步骤编写核心类SqlSessionFacotryBuild进行解析配置文件深度分析解析SqlSessionFacotryBuild干的核心工作编写...

@Autowired与@Resource原理知识点详解

springIOCAOP的不多做赘述了,说下IOC:SpringIOC解决的是对象管理和对象依赖的问题,IOC容器可以理解为一个对象工厂,我们都把该对象交给工厂,工厂管理这些对象的创建以及依赖关系...

java的redis连接工具篇(java redis client)

在Java里,有不少用于连接Redis的工具,下面为你介绍一些主流的工具及其特点:JedisJedis是Redis官方推荐的Java连接工具,它提供了全面的Redis命令支持,且...