如何让我的Javascript只显示一个以鼠标为中心的聚光灯

How do I get my Javascript to show just one spotlight centred on the mouse?

本文关键字:鼠标 一个以 为中心 聚光灯 显示 我的 Javascript      更新时间:2023-09-26

在我的网站顶部,你可以看到我的顶部有一个动画,我很难让它只显示一个以鼠标为中心的聚光灯,同时文本阴影效果也以鼠标为核心。

我发现,通过放大浏览器,居中问题得到了解决,但如果可能的话,我宁愿不为访客设置固定的缩放级别。

下面我附上了CSS,然后是我使用过的JavaScript:

CSS:

#text-shadow-box {
    position: relative;
    width: 100%;
    height: 350px;
    background: #666;
    overflow: hidden;
    cursor: none;
    border: 1px solid Black;
    -webkit-tap-highlight-color: rgba(0,0,0,0);
    -webkit-user-select: none;
}
#text-shadow-box div.wall {
    position: absolute;
    top: 175px;
    left: 0;
    width: 100%;
}
#tsb-text {
    margin: 0;
    color: #999;
    font-family: Helvetica, Arial, sans-serif;
    font-size: 80px;
    line-height: 1em;
    height: 1px;
    font-weight: bold;
    text-align: center;
}
div.wall div {
    position: absolute;
    background: #999;
    overflow: hidden;
    top: 150px;
    left: 0;
    height: 300px;
    width: 100%;
}
#tsb-spot {
    position: absolute;
    overflow: hidden;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: url(/spotlight.png) top center;
}

JavaScript:

<script type="text/javascript" language="javascript" charset="utf-8">
var text;
var spot;
///window.onload = init;
init();
function init() {
text = document.getElementById('tsb-text');
spot = document.getElementById('tsb-spot');
document.getElementById('text-shadow-box').onmousemove = onMouseMove;
document.getElementById('text-shadow-box').ontouchmove = function (e)    {e.preventDefault(); e.stopPropagation(); onMouseMove({clientX:     e.touches[0].clientX, clientY: e.touches[0].clientY});};
onMouseMove({clientX: 300, clientY: 200});
}

function onMouseMove(e) {
var xm = e.clientX - 300;
var ym = e.clientY - 175;
var d = Math.sqrt(xm*xm + ym*ym);
text.style.textShadow = -xm + 'px ' + -ym + 'px ' + (d / 5 + 10) + 'px  black';
xm = e.clientX - 600;
ym = e.clientY - 450;
spot.style.backgroundPosition = xm + 'px ' + ym + 'px';
}
</script>

对于您当前的实现,您正在使用一个聚光灯图像,如下所示:

background: url(http://www.zachstronaut.com/lab/text-shadow-box/spotlight.png) top center;

一个更好的实现是添加一个<canvas>元素,而不是在您的标题当前位于网站上的位置。可以使用CanvasRenderingContext2D.createRadialGradient()创建聚光灯效果:https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/createRadialGradient.

你也可以看到我在这里推荐的一些类似的实现:

https://jsfiddle.net/4Ezkg/

http://www.html5canvastutorials.com/advanced/html5-canvas-mouse-coordinates/

相关文章: