三维地球旋转效果
代码语言: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