JavaScript+CSS实现唯美蝴蝶动画

下面我就来详细讲解一下“JavaScript+CSS实现唯美蝴蝶动画”的完整攻略。

1. 准备蝴蝶图片素材

第一步需要准备的就是蝴蝶图片素材。这里我们需要两张素材,一张是蝴蝶展翅的图片,另一张是蝴蝶合拢翅的图片。可以在网络上搜索或者自己拍摄。

2. HTML文件结构

创建一个 HTML 文件,并添加如下结构:

<!DOCTYPE html>
<html>
<head>
    <title>蝴蝶动画</title>
    <meta charset="utf-8">
    <style>
        /* CSS样式代码 */
    </style>
</head>
<body>
    <!-- 用于渲染蝴蝶动画的DOM节点 -->
    <div id="butterfly"></div>
    <script src="./butterfly.js"></script>
</body>
</html>

3. CSS样式代码

添加下面的 CSS 代码:

#butterfly {
  width: 150px;
  height: 150px;
  background-size: contain;
  background-repeat: no-repeat;
  position: relative; 
}

#butterfly:before, #butterfly:after {
  content: "";
  position: absolute;
  width: 100px;
  height: 100px;
  background-repeat: no-repeat;  
  background-position: 0 0;
}

#butterfly:before {
  transform: translateX(-20px) translateY(-40px) rotate(-30deg);
  animation: leftWing 1s infinite linear;
}

#butterfly:after {
  transform: translateX(70px) translateY(-40px) rotate(30deg);
  animation: rightWing 1s infinite linear;
}

@keyframes leftWing {
  0% { transform: translateX(-20px) translateY(-40px) rotateZ(-30deg); background-image: url(left1.png); }
  50% { background-image: url(left2.png); }
  100% { transform: translateX(-20px) translateY(-40px) rotateZ(30deg); background-image: url(left1.png); }
}

@keyframes rightWing {
  0% { transform: translateX(70px) translateY(-40px) rotateZ(-30deg); background-image: url(right1.png); }
  50% { background-image: url(right2.png); }
  100% { transform: translateX(70px) translateY(-40px) rotateZ(30deg); background-image: url(right1.png); }
}

4. JavaScript代码

最后是 JavaScript 代码,创建一个名为 butterfly.js 的文件,添加以下代码:

var butterfly = document.getElementById('butterfly');
var width = window.innerWidth;
var height = window.innerHeight;

// 监听窗口大小变化
window.addEventListener('resize', function() {
  width = window.innerWidth;
  height = window.innerHeight;
});

// 监听鼠标移动事件
window.addEventListener('mousemove', function(event) {
  var x = event.clientX / width;
  var y = event.clientY / height;
  butterfly.style.transform = 'translate(' + (x * 40 - 20) + 'px, ' + (y * 40 - 20) +'px)';
});

这个文件的作用是控制蝴蝶的动态展示。

示例说明

这里提供两个示例,一个是将蝴蝶动画添加到网页的顶端,一个是将蝴蝶动画添加到一个容器中。

示例一

<!DOCTYPE html>
<html>
<head>
  <title>蝴蝶动画</title>
  <meta charset="utf-8">
  <style>
    #butterfly {
      width: 150px;
      height: 150px;
      background-size: contain;
      background-repeat: no-repeat;
      position: fixed;
      top: 0; 
    }

    #butterfly:before, #butterfly:after {
      content: "";
      position: absolute;
      width: 100px;
      height: 100px;
      background-repeat: no-repeat;  
      background-position: 0 0;
    }

    #butterfly:before {
      transform: translateX(-20px) translateY(-40px) rotate(-30deg);
      animation: leftWing 1s infinite linear;
    }

    #butterfly:after {
      transform: translateX(70px) translateY(-40px) rotate(30deg);
      animation: rightWing 1s infinite linear;
    }

    @keyframes leftWing {
      0% { transform: translateX(-20px) translateY(-40px) rotateZ(-30deg); background-image: url(left1.png); }
      50% { background-image: url(left2.png); }
      100% { transform: translateX(-20px) translateY(-40px) rotateZ(30deg); background-image: url(left1.png); }
    }

    @keyframes rightWing {
      0% { transform: translateX(70px) translateY(-40px) rotateZ(-30deg); background-image: url(right1.png); }
      50% { background-image: url(right2.png); }
      100% { transform: translateX(70px) translateY(-40px) rotateZ(30deg); background-image: url(right1.png); }
    }
  </style>
</head>
<body>
  <!-- 用于渲染蝴蝶动画的DOM节点 -->
  <div id="butterfly"></div>
  <script src="./butterfly.js"></script>
</body>
</html>

此示例中,CSS代码中添加了position: fixed; top: 0; 让蝴蝶动画出现在网页的顶端。

示例二

<!DOCTYPE html>
<html>
<head>
  <title>蝴蝶动画</title>
  <meta charset="utf-8">
  <style>
    #container {
      width: 500px;
      height: 500px;
      overflow: hidden;
      position: relative;
    }

    #butterfly {
      width: 150px;
      height: 150px;
      background-size: contain;
      background-repeat: no-repeat;
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
    }

    #butterfly:before, #butterfly:after {
      content: "";
      position: absolute;
      width: 100px;
      height: 100px;
      background-repeat: no-repeat;  
      background-position: 0 0;
    }

    #butterfly:before {
      transform: translateX(-20px) translateY(-40px) rotate(-30deg);
      animation: leftWing 1s infinite linear;
    }

    #butterfly:after {
      transform: translateX(70px) translateY(-40px) rotate(30deg);
      animation: rightWing 1s infinite linear;
    }

    @keyframes leftWing {
      0% { transform: translateX(-20px) translateY(-40px) rotateZ(-30deg); background-image: url(left1.png); }
      50% { background-image: url(left2.png); }
      100% { transform: translateX(-20px) translateY(-40px) rotateZ(30deg); background-image: url(left1.png); }
    }

    @keyframes rightWing {
      0% { transform: translateX(70px) translateY(-40px) rotateZ(-30deg); background-image: url(right1.png); }
      50% { background-image: url(right2.png); }
      100% { transform: translateX(70px) translateY(-40px) rotateZ(30deg); background-image: url(right1.png); }
    }
  </style>
</head>
<body>
  <!-- 容器 -->
  <div id="container">
    <!-- 用于渲染蝴蝶动画的DOM节点 -->
    <div id="butterfly"></div>
  </div>
  <script src="./butterfly.js"></script>
</body>
</html>

此示例中,CSS代码中添加了一个包含DIV的容器,并将DIV设置为相对定位,使蝴蝶动画处于该容器内。该容器添加了overflow: hidden,隐藏了蝴蝶动画在容器外部的部分。同时,在容器与蝴蝶DOM节点的CSS样式中,添加了transform: translate(-50%, -50%); 让蝴蝶DOM节点垂直水平居中。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript+CSS实现唯美蝴蝶动画 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • js 函数调用模式小结

    JS 函数调用模式小结 函数是 JavaScript 中的重要部分,函数可以通过多种方式调用。在本文中,我们将总结函数的几种调用模式,以及它们的区别和应用场景。 函数调用模式 1. 函数调用模式 这是最基本的一种调用模式。直接使用函数名并传递参数进行调用即可。 function printHello(name){ console.log(`Hello, ${…

    JavaScript 2023年5月27日
    00
  • JavaScript实现简单钟表时钟

    下面我将为你详细讲解如何使用JavaScript实现简单的钟表计时功能。 准备工作 首先,我们需要一个HTML页面作为基础。可以先创建一个空的HTML文件,然后在文件中添加以下代码: <!DOCTYPE html> <html> <head> <title>JavaScript时钟</title> …

    JavaScript 2023年5月27日
    00
  • layui use 定义js外部引用函数的方法

    以下是关于“layui use 定义js外部引用函数的方法”的完整攻略。 1. 背景介绍 “layui”是一款基于jQuery和CSS规范的前端UI框架,广泛应用于Web前端开发中。在Layui中,use()函数是一个非常常用的函数,它用来加载Layui所需的模块,是Layui的核心方法之一。但是在实际开发中,我们可能需要在导入Layui之外的js文件中使用…

    JavaScript 2023年6月11日
    00
  • 你应该了解的JavaScript Array.map()五种用途小结

    JavaScript Array.map() 是 Array.prototype 的一个函数,它使用一个传入函数来将数组的每个元素转换成另一个元素,最后返回一个新的数组。 在本篇攻略中,将会介绍五种常用的 JavaScript Array.map() 的用途,以及示例代码。 1. 数组的转换 在很多情况下,我们需要将一个数组中的元素转换成另一个类型,例如字符…

    JavaScript 2023年5月27日
    00
  • JavaScript中Reduce10个常用场景技巧

    JavaScript中reduce是一个非常有用的数组方法,它可以对一个数组的所有元素进行迭代,并返回一个最终的结果。reduce方法有很多应用场景,下面将介绍十个常用场景技巧。 1. 数组求和 使用reduce方法可以很方便地对数组中的数值进行求和。只需将reduce方法的初始值设置为0,每次迭代时将两个数值相加即可。 const arr = [1, 2,…

    JavaScript 2023年6月10日
    00
  • 最佳JS代码编写的14条技巧

    下面我将详细讲解“最佳JS代码编写的14条技巧”的完整攻略。 1. 使用语义化的命名 在编写JS代码时,我们应该尽可能使用语义化的命名,以便代码更加易读易懂。比如,在定义变量名时,应该尽量使用描述性的单词。 例如: let userName = ‘John Doe’; 这样命名,不仅可以让阅读者更快速地了解变量的意义,还可以让代码更具可读性。 2. 减少全局…

    JavaScript 2023年5月27日
    00
  • JS连接SQL数据库与ACCESS数据库的方法实例

    下面我来详细讲解JS连接SQL数据库与ACCESS数据库的方法实例的完整攻略。 一、连接SQL数据库 1. 安装node-mssql依赖 可以通过在命令行中输入以下命令安装: npm install mssql –save 2. 连接SQL Server数据库 在node.js中,需要使用mssql模块连接SQL Server数据库。下面是一个简单的示例:…

    JavaScript 2023年6月11日
    00
  • JavaScript 声明私有变量的两种方式

    下面是JavaScript声明私有变量的两种方式的完整攻略。 声明私有变量的两种方式 在JavaScript中,私有变量是指只能在类或对象内部访问的变量。通常情况下,我们用闭包或Symbol来实现私有变量的声明。 1. 闭包实现私有变量 闭包是指一个函数返回另一个函数,这个被返回的函数可以访问原函数的内部变量。下面来看一个闭包实现私有变量的示例: funct…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部