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日

相关文章

  • Javascript Boolean constructor 属性

    以下是关于JavaScript Boolean constructor属性的完整攻略。 JavaScript Boolean constructor属性 JavaScript Boolean constructor属性是Boolean对象的一个属性,它返回对创建Boolean对象的函数的引用。该属性是静态的,可以通过Boolean构造函数访问。 下面是一个使…

    JavaScript 2023年5月11日
    00
  • javascript里模拟sleep(两种实现方式)

    下面是JavaScript模拟sleep的两种实现方式的详细攻略。 方式一:使用Promise对象 定义async函数: async function sleep(duration) { return new Promise(resolve => setTimeout(resolve, duration)) } 将需要延迟执行的代码放在async函数中…

    JavaScript 2023年6月11日
    00
  • javascript 按回车键相应按钮提交事件

    要使得在输入框中按下回车键能够提交表单,可以分为以下几个步骤: 找到输入框的 DOM 元素。 给输入框添加 onkeydown 事件监听器。 在事件监听器中判断按下的是否为回车键。 如果是回车键,则阻止默认行为(即防止换行),并执行相应的提交表单操作。 下面按照具体的方法和示例一步步进行讲解。 1. 找到输入框的 DOM 元素 首先,需要找到要对其添加事件监…

    JavaScript 2023年6月10日
    00
  • JSON.stringify()方法讲解

    JSON.stringify()方法讲解 什么是 JSON.stringify() 方法? JSON.stringify() 方法是将 JavaScript 对象或值转换为 JSON 字符串的常用方法。 方法语法: JSON.stringify(value[, replacer[, space]]) 参数解释: value:必选参数,需要转换成 JSON 字…

    JavaScript 2023年5月27日
    00
  • JS使用正则表达式实现常用的表单验证功能分析

    这里我提供一份完整的攻略来实现用正则表达式实现常用的表单验证功能。步骤如下: 步骤一:准备HTML代码 首先,我们需要编写一个表单来进行验证。HTML代码如下: <form method="post" action="" id="myForm"> <label for="…

    JavaScript 2023年5月27日
    00
  • js 工具类

    /*是否带有小数*/ function isDecimal(strValue ) { var objRegExp= /^\d+\.\d+$/; return objRegExp.test(strValue); } /*校验是否中文名称组成 */ function ischina(str) { var reg=/^[\u4E00-\u9FA5]{2,4}$/;…

    JavaScript 2023年4月25日
    00
  • jQuery EasyUI提交表单验证

    jQuery EasyUI 是一款非常流行的 jQuery 插件集合,其中包含了许多实用的 UI 组件,方便我们在 Web 开发中使用。其提交表单验证功能也非常实用,在本篇文章中,我们将详细讲解 jQuery EasyUI 提交表单验证的完整攻略,包括如何配置和使用验证器,以及如何处理验证结果。 准备工作 首先,我们需要引入 jQuery EasyUI 插件…

    JavaScript 2023年6月10日
    00
  • 功能很全的精品JS计算器

    我们的“功能很全的精品JS计算器”具有以下功能: 基本的加减乘除运算 百分数和倒数运算 可以处理复杂的多位运算和顺序运算 具有清空和退格功能 下面是使用该计算器的详细攻略: 界面介绍 打开网页后,你会看到一个设计精美的计算器界面。它包含了数字键盘、运算符号、等于号、清空和退格按钮。在输入框中,你可以输入一个表达式,然后按下等于号计算它的结果。在输入过程中,如…

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