三维地球旋转效果
代码语言:html
所属分类:三维
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel='stylesheet' href='https://fonts.googleapis.com/css?family=Pirata+One&display=block'>
<style>
body {
margin: 0;
background-color: #f7f6f2;
overflow: hidden;
}
.container {
display: flex;
justify-content: center;
max-height: 100vmin;
max-width: 100vmin;
margin: 0 auto;
}
.globe {
height: 100vmin;
width: auto;
cursor: -webkit-grab;
cursor: grab;
}
.globe--dragging {
cursor: -webkit-grabbing;
cursor: grabbing;
}
</style>
</head>
<body translate="no">
<div class="container">
<canvas class="globe" width="1800" height="1600"></canvas>
</div>
<script>
const markers = [{
name: 'Uluru',
lat: -25,
long: 131 },
{
name: 'Machu Picchu',
lat: -13,
long: -70 },
{
name: 'Valley of the Kings',
lat: 25,
long: 32 },
{
name: 'Stonehenge',
lat: 51,
long: -2 }];
const $ = {
canvas: null,
ctx: null,
vCenter: 820,
scroll: {
lat: 0,
long: 20 },
markers: [],
timing: {
speed: 16,
delta: 0,
last: 0 },
drag: {
start: { x: 0, y: 0 },
force: 0,
prevX: 0,
isDragging: false },
colors: {
pushPinBase: '#969799',
pushPin: '#ed5c50',
land: '#fac648', //'#ffc975',
landShade: '#2c606e',
ocean: '#2A7B96' },
complexShapes: {
// put complex shapes here
} };
const lerp = (norm, min, max) => {
return (max - min) * norm + min;
};
const norm = (value, min, max) => {
return (value - min) / (max - min);
};
const map = (value, sourceMin, sourceMax, destMin, destMax) => {
return lerp(norm(value, sourceMin, sourceMax), destMin, destMax);
};
const dragMove = e => {
if ($.drag.isDragging) {
let long = $.drag.start.long,
clientX = e.targetTouches ? e.targetTouches[0].clientX : e.clientX,
change = clientX - $.drag.start.x,
prevChange = clientX - $.drag.prevX,
canvasWidth = $.canvas.getBoundingClientRect().width;
long += map(change, 0, canvasWidth, 0, 200);
while (long < 0) {
long += 360;
}
if (prevChange > 0 && $.drag.force < 0) {
$.drag.force = 0;
} else if (prevChange < 0 && $.drag.force > 0) {
$.drag.force = 0;
}
$.drag.force += prevChange * (600 / canvasWidth);
$.drag.prevX = clientX;
$.scroll.long = Math.abs(long) % 360;
}
};
const dragStart = e => {
if (e.targetTouches) {
e.preventDefault();
$.drag.start = {
x: e.targetTouches[0].clientX,
y: e.targetTouches[0].clientY,
.........完整代码请登录后点击上方下载按钮下载查看
















网友评论0