JavaScript+CSS实现唯美蝴蝶动画

yizhihongxing

下面我就来详细讲解一下“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的基础语法和数据类型详解

    我来为你详细讲解一下“JavaScript的基础语法和数据类型详解”的完整攻略。 基础语法 JavaScript是一种弱类型、动态的编程语言。以下是其基础语法: JavaScript代码可以嵌入到HTML文档中,也可以作为独立的js文件引入。 JavaScript代码块的起始和结束都是用大括号{}表示,语句用分号;结尾,但是在特定的情况下,分号可以省略。 J…

    JavaScript 2023年5月17日
    00
  • Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结

    JQuery是一种JavaScript库,其中包括了许多有用的工具方法,其中包括四种数据请求方法:$.get(), $.post(), $.ajax(), $.getJSON()。以下是它们的详细讲解: $.get(url, data, success, dataType) url:请求的URL地址 data:发送给服务器的数据(可以省略) success:…

    JavaScript 2023年5月19日
    00
  • AJAX初级教程之初识AJAX

    AJAX(Asynchronous JavaScript and XML)是一种用于在不重新加载整个页面的情况下更新页面的技术。本篇文章将为大家介绍AJAX的基本原理和初级应用。 1. AJAX 基本原理 AJAX 是一种使用 JavaScript 和 XML 以及现代浏览器支持的其他技术来创建交互式网页应用程序的技术。 AJAX最初用于在不重新加载整个页面…

    JavaScript 2023年6月11日
    00
  • Js动态创建div

    下面是关于JavaScript动态创建div的完整攻略。 一、什么是动态创建div 动态创建div是指使用JavaScript代码在页面中动态生成div元素。通常,我们可以使用静态页面构建工具,如HTML、CSS等,来实现页面布局和内容呈现。但某些特定的场景,需要动态生成div元素,来实现一些动态效果或者数据展示等功能。 二、如何使用JavaScript动态…

    JavaScript 2023年6月11日
    00
  • js 获取时间间隔实现代码

    获取时间间隔是在 Web 开发中比较常见的需求,例如计算两个时间之间的间隔、统计页面加载时间等,以下是详细的实现代码攻略: 获取当前时间的时间戳 在 JavaScript 中获取当前时间的时间戳可以使用 Date 对象的 getTime() 方法: // 获取当前时间的时间戳(毫秒数) var now = Date.now(); // 或者 var now …

    JavaScript 2023年5月27日
    00
  • Js 刷新框架页的代码

    要刷新网页的话可以使用JavaScript的location.reload()函数。该函数会重新加载当前网页,现在我们来分步骤说明如何实现这个功能: 步骤一:创建按钮 首先,在HTML中创建一个按钮(或其他适合的元素)。 <button onClick="refreshPage()">刷新页面</button> 步…

    JavaScript 2023年6月11日
    00
  • 浅谈下拉菜单中的Option对象

    下拉菜单是Web界面设计中常用的界面元素之一,Option对象是下拉菜单中的选项对象。要想了解Option对象,需要从以下几个方面来讲解: 1. Option对象的定义 Option对象是HTML下拉列表(select)元素中的一个选项对象,每个选项对象都有以下属性和方法: <option value="option_value" …

    JavaScript 2023年6月10日
    00
  • JavaScript中数据类型转换总结

    下面是JavaScript中数据类型转换总结的攻略: 数据类型转换总结 在JavaScript中,有些数据类型的值可以被隐式转换成其他类型的值。为了达到想要的结果,我们有时需要强制将某个数据类型转换成另一个数据类型。以下内容将介绍JavaScript中的数据类型转换。 1. 转换为数字 当需要将一个值转换成数字时,可以使用一元加运算符(+),或者Number…

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