JavaScript—实现手风琴画册

news2024/12/29 9:44:38

在这里插入图片描述

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:前端案例分享专栏
✨特色专栏:国学周更-心性养成之路
🥭本文内容:JavaScript—实现手风琴画册
更多内容点击👇
      1、CSS中iconfont 彩色图标使用详解

【本文目录】

    • 项目效果
    • 涉及功能
    • 项目分析
    • 项目需求
    • 项目实现
    • 处理错误
    • 共性问题
    • 技术实现

项目效果

  • 图片分布在格子中
  • 鼠标放置的格子会放大
  • 其他格子自动调整大小
  • 放大的个子中显示文字

请添加图片描述

涉及功能

  • JavaScript:
    • 控制格子的大小
    • 响应鼠标
  • CSS:
    • 处理动画

项目分析

  • 放大的格子
  • 与放大格子在同一列
  • 与放大格子在同一行
  • 被技开的格子

在这里插入图片描述

项目需求

  • 为该画册添加自动滚动放大的功能
    • 每隔3秒依次放大一张图片
    • 当鼠标移入任意图片时,停止自动滚动
    • 当鼠标不在任意一张图片上,恢复自动滚动

项目实现

  • 使用JS封装代码
    • 引用类代码
    • 实例化类
      在这里插入图片描述
  • 实现类代码
    • 实现默认配置
    • 检测用户配置
    • 实现图片放大方法
    • 添加鼠标时间
  • 实现CSS代码
    • 添加动画
    • 处理图片居中
    • 处理文字动画

处理错误

  • 分析错误成因
  • 编写解决方案

共性问题

  • 常见问题及解决方法
  • 代码规范问题
  • 调试技巧

技术实现

  • 使用DIV布局HTML网页
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Gallery</title>
  <link href="./style.css" rel="stylesheet" type="text/css" />
</head>
<body>
  <div id="xy-gallery">
    <div><img src="./images/image1.jpg" /></div>
    <div>
      <img src="./images/image2.jpg" />
      <div class="text">
        <p>some text here</p>
      </div>
    </div>
    <div><img src="./images/image3.jpg" /></div>
    <div><img src="./images/image4.jpg" /></div>
    <div><img src="./images/image5.jpg" /></div>
    <div>
      <img src="./images/image6.jpg" />
      <div class="text">
        <h1>this is a big title</h1>
        <p>Laborum anim quis non sint qui. Non deserunt laboris nulla proident tempor in occaecat. Excepteur proident ex veniam labore. Magna dolor sunt pariatur nisi nulla. Est pariatur amet cillum sint nostrud. Proident mollit occaecat exercitation minim nisi labore ullamco nulla mollit pariatur. Commodo aute est culpa pariatur velit tempor enim ipsum deserunt id non tempor.</p>
      </div>
    </div>
    <div><img src="./images/image7.jpg" /></div>
    <div><img src="./images/image8.jpg" /></div>
    <div><img src="./images/image9.jpg" /></div>
    <div><img src="./images/image10.jpg" /></div>
    <div><img src="./images/image11.jpg" /></div>
    <div><img src="./images/image12.jpg" /></div>
    <div><img src="./images/image13.jpg" /></div>
    <div><img src="./images/image14.jpg" /></div>
    <div><img src="./images/image15.jpg" /></div>
    <div><img src="./images/image16.jpg" /></div>
    <div><img src="./images/image17.jpg" /></div>
    <div><img src="./images/image18.jpg" /></div>
    <div><img src="./images/image19.jpg" /></div>
    <div><img src="./images/image20.jpg" /></div>
  </div>
  <script type="text/javascript" src="script.js"></script>
  <script type="text/javascript">
    var gallery = new XyGallery("xy-gallery", {width: 5, height: 4})
  </script>
</body>
</html>
  • CSS样式美化界面
*{margin: 0; padding: 0;}
.xy-gallery > div{ 
  float: left;
  box-sizing: border-box;
  position: relative;
  overflow: hidden;
  border-bottom: 1px solid #fff;
  border-right: 1px solid #fff;
  transition: all .3s;
}
.xy-gallery > div img{ position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%)}
.xy-gallery > div .text{ 
  transition:all 1s .3s;
  opacity: 0;
  bottom: 0;
  transform: translateY(100%);
  position: absolute;
  width: 340px;
  background: rgba(255, 255, 255, 0.3);
  padding: 10px 20px;
  color: #ffffff;
  box-sizing: border-box;
}
.xy-gallery > div.active .text{ opacity: 1;transform: translateY(0%);}


  • 使用JavaScript制作特效
function XyGallery(id, option) {
  var container = document.getElementById(id);
  if (!~container.className.indexOf('xy-gallery')) container.className += " xy-gallery";
  var defaultOption = {
    defaultWidth: 130,
    defaultHeight: 40,
    activeWidth: 340,
    activeHeight: 400,
    animateDuration: 300
  }

  option = Object.assign({}, defaultOption, option);

  if (option.width && option.height && option.width * option.height != container.children.length) throw "width and height not match children length!";

  var lastRunTime = new Date(0);
  var runId = 0;
  var activePicture = function (index) {
    clearTimeout(runId)
    var currentTime = new Date();
    if (currentTime - lastRunTime < option.animateDuration) {
      runId = setTimeout(function () {
        activePicture(index)
      }, option.animateDuration);
      return;
    }
    lastRunTime = currentTime;

    container.style.width = (option.width - 1) * option.defaultWidth + option.activeHeight + 'px'
    var cx = index % option.width;
    var cy = Math.floor(index / option.width);
    for (var x = 0, xl = option.width; x < xl; x++) {
      for (var y = 0, yl = option.height; y < yl; y++) {
        var cindex = y * option.width + x;
        var item = container.children[cindex];
        if (x == cx && y == cy) {
          item.className = "active";
          item.style.width = option.activeWidth + "px";
          item.style.height = option.activeHeight + "px";
        } else if (x == cx) {
          item.className = "";
          item.style.width = option.activeWidth + "px";
          item.style.height = option.defaultHeight + "px";
        } else if (y == cy) {
          item.className = "";
          item.style.width = option.defaultWidth + "px";
          item.style.height = option.activeHeight + "px";
        } else {
          item.className = "";
          item.style.width = option.defaultWidth + "px";
          item.style.height = option.defaultHeight + "px";
        }
      }
    }
  }
  activePicture(0);

  var runId = 0;
  Array.prototype.forEach.call(container.children, function (o, i) {
    o.addEventListener('mouseenter', function (evt) {
      activePicture(i);
    })
  })

  return {
    active: activePicture,
    setSize: function(width, height){
      if (width && height && width * height != container.children.length) throw "width and height not match children length!";
      option.width = width;
      option.height = height;
      activePicture(0)
    }
  }
}

  码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

在这里插入图片描述

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

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

相关文章

EM算法——投硬币样例实现

理论参考 【机器学习】EM——期望最大&#xff08;非常详细&#xff09; 样例介绍 有c个硬币&#xff0c;每次随机选一个投掷n次&#xff0c;重复执行m次并记录结果。 根据投掷结果计算出每个硬币正面的概率。 每次选择的硬币未知。 过程介绍 随机初始化硬币为正的概率 he…

阿里P8终于整理出:Nginx+jvm+MySQL+Docker+Spring实战技术文档

前言 都说程序员工资高、待遇好&#xff0c; 2022 金九银十到了&#xff0c;你的小目标是 30K、40K&#xff0c;还是 16薪的 20K&#xff1f;作为一名 Java 开发工程师&#xff0c;当能力可以满足公司业务需求时&#xff0c;拿到超预期的 Offer 并不算难。然而&#xff0c;提升…

Java搭建实战毕设项目springboot停车位管理系统源码

大家好啊&#xff0c;我是测评君&#xff0c;欢迎来到web测评。 本期给大家带来一套Java开发的毕设项目springboot停车位管理系统源码&#xff0c;适合拿来做毕业设计的同学。可以下载来研究学习一下&#xff0c;本期把这套系统分享给大家。 技术架构 技术框架&#xff1a;jQu…

报表控件ActiveReports帮助高校实现办公、财务管理数字化

国内某知名高校教务处 陈主任&#xff1a; “我们教务处有十分多的文件、文档需要归纳整理&#xff0c;包括整个学校的文件通知公告、一些教务资源、职工工作日志记录、职工考勤记录等&#xff0c;同时还涉及一部分财务信息&#xff0c;职工的工资核算、学生续费的收纳等&…

初始python国度

print()函数 我里面有一个你可以直接使用的函数叫print()&#xff0c;可以将你想展示的东东在IDLE或标准的控制台上显示 print()函数可以输出哪些内容? (1)print()函数输出的内容可以是数字 (2)print()函数输出的内容可以是字符串 (3)print()函数输出的内容可以是含有运算符…

模拟电子技术(八)功率放大电路

&#xff08;四&#xff09;放大电路的频率响应电路基础复习功率放大电路的特点功率放大电路的分类互补功率放大电路&#xff08;OCL&#xff09;OCL的计算分析电路基础复习 功率放大电路的特点 以共射放大电路为例 电源功率消耗在了输出回路中&#xff08;Rb上的忽略&#…

智慧天气系统 - 可视化大屏(Echarts)管理系统(HTTP(S)协议)物联网平台(MQTT协议)

一. 智慧天气系统功能定义 天气数据实时监控&#xff0c;实时视频监控&#xff0c;历史数据分析&#xff1b;电子地图&#xff0c;设备地理位置精确定位&#xff1b;多级组织结构管理&#xff0c;满足集团大客户需求&#xff1b;可视化大屏展示&#xff0c;数据指标一目了然&am…

前端小技能:Chrome DevTools中的操作技巧

文章目录 前言I 操作技巧1.1 编辑页面上的任何文本 ✍1.2 清空缓存并硬性重新加载1.3 Command 菜单see aslo前言 Mac 使用 command+option+I 即可打开DevTools I 操作技巧 1.1 编辑页面上的任何文本 ✍ 在控制台输入document.body.contentEditable="true"开启文本…

计算机视觉 神经网络基础理论

1.感受野 输出featuremap上的一个像素点在输入图上的映射区域的大小。 计算公式&#xff1a; lk1lk[(fk1−1)∗∏i1ksi] , 为前层的步长之积∏i1ksi为前k层的步长之积第层对应的感受野大小&#xff0c;第层的卷积核的大小&#xff0c;或为池化尺寸大小lk第k层对应的感受野大小…

【C++】特殊类相关设计

前言 在实际的应用场景中&#xff0c;不免会有一些特殊的设计要求存在。在C中&#xff0c;由于三种不同的域&#xff0c;以及地址空间的大小或者申请方式不同&#xff0c;就衍生出了一些特殊的设计类方法。 何为特殊呢&#xff1f;即区别于普通类的设计。 上一篇C笔记传送门~ 【…

[附源码]计算机毕业设计的高校资源共享平台Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

第二证券|抗原检测板块暴涨,又是20CM涨停!

抗原检测概念起飞&#xff0c;组织以为&#xff0c;抗原检测在国内疫情防控中的重要性有望逐渐提高&#xff0c;主张重视板块潜在的市场需求。 抗原检测板块掀涨停潮 9日&#xff0c;抗原检测概念开盘冲高&#xff0c;到午间收盘&#xff0c;天瑞仪器、英诺特20CM涨停&#xf…

期权量化策略:如何利用期权捕捉期现套利机会?

做期权的朋友请看过来&#xff01;当前与掘金量化合作的特定券商已经能够支持期权数据和交易接口啦~如需开展期权量化&#xff0c;请联系我了解更多详情。 本期我们将和大家分享一个策略&#xff0c;介绍如何利用期权进行自动化套利。 期现套利是指某种期货合约&#xff0c;当…

浅谈linux 内核网络 sk_buff 之克隆与复制

【推荐阅读】 需要多久才能看完linux内核源码&#xff1f; 概述Linux内核驱动之GPIO子系统API接口 一文了解Linux内核的Oops 一篇长文叙述Linux内核虚拟地址空间的基本概括 纯干货&#xff0c;linux内存管理——内存管理架构&#xff08;建议收藏&#xff09; 1 skb_clone() 函…

1X的示波器探头为什么会降低示波器带宽

有些无源示波器探头分为1X和10X两个挡位&#xff0c;比如这个探头&#xff0c;这里有个按钮可以选择1X或者10X&#xff0c; 1X表示测量的信号不在探头衰减&#xff0c;同时示波器的通道选项也不用放大&#xff0c;10X表示测量的信号在探头衰减10倍&#xff0c;同时示波器的通道…

Spring Boot的两种配置文件

⭐️前言⭐️ Spring Boot项目中重要的数据都是在配置文件中配置的&#xff0c;下边我们就来学习SpringBoot中的配置文件的具体详情。 &#x1f349;博客主页&#xff1a; &#x1f341;【如风暖阳】&#x1f341; &#x1f349;精品Java专栏【JavaEE进阶】、【JavaEE初阶】、…

2.5D游戏,角色移动限制方法。不用空气墙。

有一个项目&#xff0c;2.5D视角。角色在设定好的路线上自由移动&#xff0c;不能超出路线。 之前的做法是用空气墙&#xff0c;设定物理碰撞&#xff0c;然后角色移动。 我感觉这种做法性能有点低。手机上体验平均帧时是4ms 于是想用空间换时间&#xff0c;将可能的运算进行预…

chrome 如何下载网站在线预览PDF文件,保存到本地

爱学习的小伙伴肯定遇到过那种只能在线看&#xff0c;但并不提供下载的的PDF文件&#xff01; 但有时候想保存到本地有很费劲。今天准备了一个很简单的方法 以这个在线pdf为例 在线PDF文件 该如何把这个PDF保存到本地呢~ 方法 1.以chrome浏览器为例&#xff0c;打开准备好的示…

iOS运行时Runtime在OC中的应用场景

本篇将会总结Rutime的具体应用实例&#xff0c;结合其动态特性&#xff0c;Runtime在开发中的应用大致分为以下几个方面&#xff1a; 一、动态方法交换&#xff1a;Method Swizzling 实现动态方法交换(Method Swizzling )是Runtime中最具盛名的应用场景&#xff0c;其原理是&a…

SpringBoot2.0中MVC和WebFlux控制层Controller对比

本篇文章是SpringBoot2.0关于Controller控制层的对比&#xff0c;相信很多开发最好奇的也是这块。那么小编就带着大家一起先来看一下尝尝鲜,本篇文章比较短小精悍,只讲如何使用,至于原理剖析,后面会讲。阅读时间大概3分钟,现在开始! 文章目录一、演示目录结构二、演示启动类定义…