这是我很长一段时间以来一直想尝试的一个小片段。我终于开始重新创建 Google 地图的这一标志性功能:拖放这个名为 街景小人 的小家伙,即可切换到街景视图。
TL;DR
点击并拖动右下角的小图标到地图上:
结构很简单。我有:
<div> <h2> CSS </h2> <p>Positioning everything is simple, as you can see in the source code above, but the most important part is the rotate property. This is dynamically updated using JavaScript:<br> </p> <pre class="brush:php;toolbar:false">#pegman { /* other styles */ rotate: var(--r); }
旋转值会根据用户交互而变化,我们接下来将深入探讨。
这里的一切都围绕着用户交互。 JavaScript 句柄:
const pegman = document.querySelector('#pegman'); let isDragging = false; let initialX = 0; let initialY = 0; let inactivityTimeout; let lastX = 0; const timeout = 25; const maxDegrees = 50; // Event listeners pegman.addEventListener('mousedown', onMouseDown); document.addEventListener('mousemove', onMouseMove); document.addEventListener('mouseup', onMouseUp);
让我们分解一下每个功能:
这通过记录初始鼠标位置并切换 isDragging 标志来开始拖动。
const onMouseDown = (e) => { isDragging = true; initialX = e.clientX; initialY = e.clientY; };
这会处理街景小人在拖动过程中的移动和旋转。它确保:
const onMouseMove = (e) => { if (!isDragging) return; const dy = e.clientY - initialY; const dx = e.clientX - initialX; // Limit rotation range let rx = Math.max(-maxDegrees, Math.min(maxDegrees, dx - lastX)); pegman.setAttribute('style', `--r: ${rx}deg`); // Animate Pegman's position pegman.animate({ translate: `${dx}px ${dy}px` }, { duration: 100, fill: 'forwards', }); // Reset rotation after inactivity clearTimeout(inactivityTimeout); inactivityTimeout = setTimeout(() => { lastX = dx; pegman.setAttribute('style', `--r: 0deg`); }, timeout); };
一旦用户停止拖动,就会重置街景小人的状态:
const onMouseUp = () => { isDragging = false; // Reset rotation pegman.setAttribute('style', `--r: 0`); // Animate Pegman back to its original position pegman.animate({ translate: `0px 0px` }, { duration: 500, fill: 'forwards', easing: 'ease', }); // Clear residual state inactivityTimeout = setTimeout(() => { lastX = 0; }, timeout); };
此片段强调了简单的动画和交互性如何重新创建标志性的用户体验。要点:
请随意分叉 CodePen,进行更改并让我知道您的想法! ??️
我使用的是谷歌的原始精灵,你可以在这里看到并进行实验:
你知道吗?✨ 我用的谷歌地图位置才是真正的圣诞老人村!
有趣的事实:圣诞老人的芬兰名字是 Joulupukki,他来自芬兰???
以上是如何从 Google 地图重新创建标志性街景小人的详细内容。更多信息请关注PHP中文网其他相关文章!