<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>css3实现地球模型旋转缩放</title>
<link rel="stylesheet" type="text/css" href="css/demo2.css" />
</head>
<body>
<div>
<div class="container">
<!-- 圆心-->
<div class="circle"><span style="line-height: 84px;">圆心</span></div>
<!-- 第一层-->
<div class="borther">
<div id="lopp"></div>
<div class="ball" onmouseenter="onMouseGo()" onmouseout="onMouseMove()" onclick="clickMsg(this)">1</div>
<div class="ball" onmouseenter="onMouseGo()" onmouseout="onMouseMove()" onclick="clickMsg(this)">2</div>
<div class="ball" onmouseenter="onMouseGo()" onmouseout="onMouseMove()" onclick="clickMsg(this)">3</div>
<div class="ball" onmouseenter="onMouseGo()" onmouseout="onMouseMove()" onclick="clickMsg(this)">4</div>
<div class="ball" onmouseenter="onMouseGo()" onmouseout="onMouseMove()" onclick="clickMsg(this)">5</div>
</div>
<!-- 第二层-->
<div class="borther2">
<div id="lopp2"></div>
<div class="ball ball2" onmouseenter="onMouseGo()" onmouseout="onMouseMove()" onclick="clickMsg(this)">1</div>
<div class="ball ball2" onmouseenter="onMouseGo()" onmouseout="onMouseMove()" onclick="clickMsg(this)">2</div>
<div class="ball ball2" onmouseenter="onMouseGo()" onmouseout="onMouseMove()" onclick="clickMsg(this)">3</div>
<div class="ball ball2" onmouseenter="onMouseGo()" onmouseout="onMouseMove()" onclick="clickMsg(this)">4</div>
<div class="ball ball2" onmouseenter="onMouseGo()" onmouseout="onMouseMove()" onclick="clickMsg(this)">5</div>
</div>
</div>
</div>
<script>
var items = document.querySelectorAll('.ball');
// items[0].style['animation-delay'] = '-5s,0s,0s';
// items[0].querySelector('.item__circle').style['transform'] = 'scale(1.5)';
//
for (var i = 0; i < items.length; i++) {
(function (i) {
items[i].style['animation-delay'] = (-5) - 4 * i + 's,' + (-4 * i) + 's,' + (-4 * i) + 's'
})(i);
}
function onMouseGo() {
// document.querySelectorAll('.ball').classList.add('active')
for (var i = 0; i < items.length; i++) {
(function (i) {
items[i].classList.add('active')
})(i);
}
}
function onMouseMove() {
// document.getElementsByClassName('ball').classList.remove('active')
for (var i = 0; i < items.length; i++) {
(function (i) {
items[i].classList.remove('active')
})(i);
}
}
function clickMsg(e) {
alert(e.innerText)
}
</script>
</body>
</html>
css3地球转动模型,模拟地球转动
需积分: 0 14 浏览量
更新于2023-04-25
收藏 20KB ZIP 举报
在本项目中,我们主要探讨的是如何利用CSS3和JavaScript技术来创建一个动态的地球转动模型,这个模型能够展示一组数据球体环绕中心地球旋转的效果。这个应用对于那些需要在网页上实现数据可视化或者交互式展示的场景非常有用。下面我们将深入解析这个项目的核心技术和实现步骤。
CSS3在这个模型中起到了关键的作用。CSS3提供了丰富的动画功能,例如`transform`属性,可以让我们轻松地实现元素的旋转、缩放和移动。在创建地球转动效果时,我们可以为地球元素设置`transform: rotateX(xdeg) rotateY(ydeg)`,通过改变`xdeg`和`ydeg`的值,模拟地球的自转和公转。同时,`transition`属性可以平滑地过渡这些变换,增加视觉效果的流畅性。
接着,JavaScript是实现动态效果的关键。在这个项目中,我们可能使用了JavaScript的`requestAnimationFrame`函数来实现周期性的动画更新。这个函数在浏览器下一次重绘之前调用指定的回调函数,非常适合用于创建连续的动画效果。通过在回调函数中修改地球和数据球体的位置,我们可以实现它们围绕中心轴的连续运动。
如果项目中还涉及Vue或React框架,那么这个模型可能是作为组件来构建的。Vue和React都是现代前端开发的主流框架,它们允许我们将UI分解为可复用的组件。在这些框架中,我们可以创建一个地球组件,包含地球的CSS样式和JavaScript逻辑,然后在需要的地方引入这个组件。通过组件化,我们可以保持代码的组织性和可维护性。
为了实现数据球体的环绕,可能采用了数组存储每个数据球体的信息,包括其位置、颜色等属性。在每次动画更新时,根据预设的轨道参数调整这些球体的坐标。此外,如果需要根据用户交互来改变模型,还可以监听用户的输入事件,动态调整地球或数据球体的参数。
在实际的代码中,`3DEarthCss3`这个文件可能包含了CSS样式和JavaScript代码。CSS文件负责定义地球和其他元素的样式,包括形状、颜色、阴影等,以达到逼真的视觉效果。JavaScript文件则处理动画逻辑,包括计算每个时间点的数据球体位置,以及启动和停止动画的功能。
总结来说,这个项目利用了CSS3的动画特性,配合JavaScript的定时更新机制,创建了一个动态的地球转动模型。如果结合Vue或React,这个模型可以通过组件的形式进行复用和扩展。通过理解和掌握这些技术,开发者可以制作出更丰富、更互动的可视化页面,提升用户体验。