day35-Image Carousel(图片轮播图简易版)

news2024/11/26 6:02:20

50 天学习 50 个项目 - HTMLCSS and JavaScript

day35-Image Carousel(图片轮播图简易版)

效果

在这里插入图片描述

index.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Image Carousel</title>
    <link rel="stylesheet" href="style.css" />
</head>

<body>
    <!-- 轮播图 -->
    <div class="carousel">
        <!-- 图片容器 -->
        <div class="image-container" id="imgs">
            <img src="https://images.unsplash.com/photo-1599394022918-6c2776530abb?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1458&q=80"
                alt="first-image" />
            <img src="https://images.unsplash.com/photo-1593642632559-0c6d3fc62b89?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1500&q=80"
                alt="second-image" />
            <img src="https://images.unsplash.com/photo-1599423300746-b62533397364?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1500&q=80"
                alt="third-image" />
            <img src="https://images.unsplash.com/photo-1599561046251-bfb9465b4c44?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1492&q=80"
                alt="fourth-image" />
        </div>
        <!-- 按钮-->
        <button id="left" class="btn">&lt;</button>
        <button id="right" class="btn">&gt;</button>
    </div>

    <script src="script.js"></script>
</body>

</html>

style.css

@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap');

* {
    box-sizing: border-box;
}

body {
    /* background: url('https://source.unsplash.com/random/1000x600') no-repeat center/100% 100%; */
    font-family: 'Roboto', sans-serif;
    /* 居中 */
    display: flex;
    align-items: center;
    justify-content: center;
    height: 100vh;
    margin: 0;
}

img {
    width: 500px;
    height: 500px;
    /* 元素的内容会被等比例缩放,以便完全覆盖容器的尺寸。这意味着图像或视频的某些部分可能会被裁剪,以使内容填充整个容器,并保持其纵横比。 */
    object-fit: cover;
}

/* 轮播图 */
.carousel {
    box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.3);
    height: 500px;
    width: 500px;
    /* 超出部分隐藏 */
    overflow: hidden;
    position: relative;
}

/* 图片容器 */
.image-container {
    display: flex;
    transform: translateX(0);
    transition: transform 0.5s ease-in-out;
}

/* 按钮 */
.btn {
    background-color: rgba(0, 0, 0, 0.3);
    color: black;
    border: none;
    cursor: pointer;
    width: 2rem;
    outline: none;
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
    padding: 0.5rem 0;
}
#left{
    padding-right: 0.5rem;
    border-radius: 0 50% 50% 0;
    left: 0;
}
#right {
    padding-left: 0.5rem;
    border-radius: 50% 0 0 50%;
    right: 0;
}
.btn:hover {
    opacity: 0.9;
}

script.js

// 重点 transform transition
// 1.获取元素节点
const imgs = document.getElementById('imgs')//图片容器
const leftBtn = document.getElementById('left')//上一张按钮
const rightBtn = document.getElementById('right')//下一张按钮

const img = document.querySelectorAll('#imgs img')//所有图片
// 当前图片索引
let idx = 0
// 间隔器
let interval = setInterval(run, 2000)
// 滑动
function run() {
    idx++
    // 改变图片
    changeImage()
}

// 改变图片
function changeImage() {
    if (idx > img.length - 1) {
        idx = 0
    } else if (idx < 0) {
        idx = img.length - 1
    }
    imgs.style.transform = `translateX(${-idx * imgs.offsetWidth}px)`
    imgs.style.transition = `transform 0.5s ease-in-out`
}
// 重置
function resetInterval() {
    clearInterval(interval)
    interval = setInterval(run, 2000)
}
// 下一张
rightBtn.addEventListener('click', () => {
    idx++
    changeImage()
    resetInterval()
})
// 上一张
leftBtn.addEventListener('click', () => {
    idx--
    changeImage()
    resetInterval()
})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/778547.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

93、简述kafka架构设计

kafka架构设计 Consumer Group&#xff1a;消费者组&#xff0c;消费者组内每个消费者负责消费不同分区的数据&#xff0c;提高消费能力。逻辑上的一个订阅者。Topic: 可以理解为一个队列&#xff0c;Topic 将消息分类&#xff0c;生产者和消费者面向的是同一个 Topic。Partiti…

netty组件详解-中

接着之前的博客netty组件详解-上&#xff0c;我们继续深入到源码层面&#xff0c;来探究netty的各个组件和其设计思想&#xff1a; netty内置的通讯模式 我们在编写netty代码时&#xff0c;经常使用NioServerSocketChannel 作为通讯模式。 例如下面的简单netty客户端示例: pri…

Docker迁移默认的/var/lib/docker目录

安装完Docker后&#xff0c;默认存储路径在/var/lib/docker目录&#xff0c;如果服务器挂载的硬盘不是根目录的话&#xff0c;可能会造成资源不够用。这时候就需要迁移docker默认的目录。 1.停止docker服务 systemctl stop docker 复制 2.创建docker新目录 mkdir -p /data…

airtest-selenium 脚本爬取百度热搜标题

目录 1. 前言 2. 爬取标题的脚本 3. 命令行运行 Web 自动化脚本 1&#xff09;python 环境准备 2&#xff09;chrome 与 chromedriver 版本对应 3&#xff09;命令行运行 1. 前言 airtest-selenium是一个基于Python的UI自动化测试框架&#xff0c;它结合了airtest和sele…

【Redis】缓存问题小记

文章目录 1、缓存模型和思路1.1、缓存更新策略1.2、具体实现思路 2、缓存穿透问题2.1、方案分析2.2、缓存空对象实现思路2.3、小总结 3、缓存雪崩4、缓存击穿4.1、方案分析4.1.1、互斥锁4.1.2、逻辑过期4.1.3、方案对比 4.2、互斥锁实现思路4.3、逻辑过期实现思路 1、缓存模型和…

微服务——统一网关Getway

为什么需要网关&#xff1f; 网关的两种实现: 网关Getway——快速入门 步骤一 网关背身也是一个微服务&#xff0c;需要注册到nacos中去 步骤二 成功运行后 可以通过网关进行请求转发到对应服务。 流程如下&#xff1a; 路由断言工厂 网关路由可以配置的东西有如下。 spri…

RocketMQ分布式事务 -> 最终一致性实现

文章目录 前言事务消息场景代码示例订单服务事务日志表TransactionMQProducerOrderTransactionListener业务实现类调用总结 积分服务积分记录表消费者启动消费者监听器增加积分幂等性消费消费异常 前言 分布式事务的问题常在业务与面试中被提及, 近日摸鱼看到这篇文章, 阐述的…

Web前端开发概述(二)

&#x1f60a;Web前端开发概述&#xff08;二&#xff09; &#x1f47b;前言&#x1fa81;前端开发背景&#x1f50d;当下前端开发要求&#x1f526;Web前端开发技术&#x1f3ad;HTML&#x1f3ad;CSS&#x1f3ad;JavaScript&#x1f3ad;HTML DOM&#x1f3ad;BOM&#x1f…

Spring中AOP的通知类型和执行顺序

Spring中AOP的通知类型&#xff1a; Around&#xff1a;环绕通知&#xff0c;此注解标注的通知方法在目标方法前、后都被执行Before&#xff1a;前置通知&#xff0c;此注解标注的通知方法在目标方法前被执行After &#xff1a;后置通知&#xff0c;此注解标注的通知方法在目标…

Jmeter+Jenkins+Ant自动化持续集成环境搭建

一、安装准备 1.JDK:jdk-8u121-windows-x64 2.jmeter工具&#xff1a;apache-jmeter-2.13 3.ANT工具&#xff1a;apache-ant-1.9.7-bin 4.jenkins工具&#xff1a;jenkins-2.32.2 二、软件安装 1.JDK的安装 >双击JDK安装包&#xff0c;选择安装路径&#xff08;本人是…

论文笔记--ERNIE: Enhanced Language Representation with Informative Entities

论文笔记--ERNIE: Enhanced Language Representation with Informative Entities 1. 文章简介2. 文章概括3 文章重点技术3.1 模型框架3.2 K-Encoder(Knowledgeable Encoder)3.3 预训练任务3.4 微调 4. 文章亮点5. 原文传送门6. References 1. 文章简介 标题&#xff1a;ERNIE:…

每天五分钟计算机视觉:单卷积层的前向传播过程

什么是单卷积层? 一张图片(输入)经过多个卷积核卷积就会得到一个输出,而这多个卷积核的组合就是一个单卷积层。 这些卷积核可能大小是不一样的,但是他们接收同样大小是输入,他们的输出必须是一般大小,所以不同的卷积核需要具备不同的步长和填充值。 单层卷积网络前向传…

springboot+vue开发后台增删改查

效果图 前端代码【User.vue】 <template><div class"data-container"><!--添加 start--><div class"data-header"><el-button round click"addHander" size"large" type"primary"><el-ic…

Cesium态势标绘专题-普通点(标绘+编辑)

标绘专题介绍:态势标绘专题介绍_总要学点什么的博客-CSDN博客 入口文件:Cesium态势标绘专题-入口_总要学点什么的博客-CSDN博客 辅助文件:Cesium态势标绘专题-辅助文件_总要学点什么的博客-CSDN博客 本专题没有废话,只有代码,代码中涉及到的引入文件方法,从上面三个链…

ORB-SLAM2学习笔记5之EuRoc、TUM和KITTI开源数据运行ROS版ORB-SLAM2生成轨迹

文章目录 0 引言1 数据预处理1.1 EuRoc数据1.2 TUM数据1.3 KITTI数据 2 代码修改2.1 单目2.2 双目2.3 RGB-D 3 运行ROS版ORB-SLAM23.1 单目3.2 双目3.3 RGB-D ORB-SLAM2学习笔记系列&#xff1a; 0 引言 ORB-SLAM2学习笔记1已成功编译安装ROS版本ORB-SLAM2到本地&#xff0c;本…

3、基于Zookeeper实现分布式锁

目录 3.1、Zookeeper安装和相关概念3.1.1 安装启动3.1.2 相关概念3.1.3 Java客户端 3.2 Zookeeper实现分布式锁的思路分析3.3 ZooKeeper分布式锁的基本实现 3.1、Zookeeper安装和相关概念 3.1.1 安装启动 # 解压到/mysoft文件夹下 tar -zxvf zookeeper-3.7.0-bin.tar.gz # 重…

SAP从放弃到入门系列之批次派生-Batch Derivation-Part1

文章目录 一、概述二、系统配置三、主数据3.1 分类主数据3.2 派生规则设置3.2.1发送物料3.2.2 接收物料 四、 测试数据&#xff08;生产订单&#xff09;五、 最后 Batch Derivation翻译成批次派生&#xff08;衍生&#xff09;或批次继承都是问题不大&#xff0c;继承和派生个…

day31贪心算法 用最少数量的箭引爆气球 和无重叠区间

题目描述 题目分析&#xff1a; x轴向上射箭&#xff0c;12一支&#xff0c;重叠的需要一支&#xff0c;3-8一支&#xff0c;7-16一支 返回2&#xff1b; 就是让重叠的气球尽量在一起&#xff0c;局部最优&#xff1b;用一支弓箭&#xff0c;全局最优就是最少弓箭&#xff1b…

ShardingSphere分库分表实战之MySQL主从集群搭建

&#x1f680; ShardingSphere &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&…

uniapp 微信小程序 uni.modal弹框+content内容自定义(内容换行)

效果图&#xff1a; 1、template <view click"showPriceDialog"></view>2、data data() {return {contentText:"",} },3、methods // 价格公示 showPriceDialog: function() {// 吨let minPriceTon 1900let maxPriceTon 3895// 袋let …