Javascript-使图像出现在光标处
Javascript - Make image appear at cursor
有什么想法可以达到类似的效果吗?
http://garyc.me/fun/gusta.swf
是,使用mousemove
事件
http://jsfiddle.net/GTTGD/1/
var img = new Image;
img.src = 'http://files.myopera.com/lengoc89/albums/317185/3133~Kitty-Posters.jpg';
document.addEventListener('mousemove', function(e) {
e = e || window.event;
var tag = document.createElement('img');
console.log(e);
tag.src = img.src;
tag.style.position = 'absolute';
tag.style.height = '50px';
tag.style.width = '50px';
tag.style.top = (e.pageY || e.clientY) + 'px';
tag.style.left = (e.pageX || e.clientX) + 'px';
this.body.appendChild(tag);
}, false);
事后看来,这是一个相当愚蠢的答案。因此,我将用一个实际的例子再次回答,用HTML5制作flash文件中的内容。
如果你能完全理解这是如何工作的,那么在一瞬间做出同样的事情应该不费吹灰之力。但也要考虑到我无意中制作的演示比flash演示运行得更快、更稳定,所以你可能会考虑在下一个项目中使用HTML5。
我做的例子就在这里,事不宜迟,我将逐行分解,从HTML:开始
<canvas id="canvas" width="400" height="300">
Your browser does not support the HTML5 canvas. <br>
Get or upgrade to a modern browser like Google Chrome or Mozilla Firefox.
</canvas>
这将在DOM中创建一个<canvas>
元素。画布是一个包含在HTML5规范中的2D(很快就会是3D!)图形API,它允许图形的绘制和动画。您使用JavaScript
通过其drawing context
来控制画布,因此了解ECMAscript
(包括JavaScript
和Flash的ActionScript
,后者基于JavaScript
)将有很大帮助。
现在的JavaScript:
ctx = canvas.getContext('2d');
这将获得绘图上下文,该上下文提供了允许您在画布上绘图的方法。目前唯一的参数是'2d'
,但有一个参数'experimental-webgl'
允许使用一种名为web gl
的实验3D技术,但需要一个好的视频卡。我相信这只适用于像Google Chrome这样的Webkit浏览器和像Firefox这样的Gecko浏览器。
注意:在我测试过的每一个浏览器中,你都不必使用document.getElementById()
方法来通过id来抓取项目。只要id存在于HTML中,一个变量列表就会变成on load
,该列表包含并以具有该属性的每个元素的id命名。当然,这意味着您必须将<script>
标记放在HTML的下方,而不是上方,这样就可以预先加载DOM和节点列表。
mouse = [0,0];
imgLoaded = false;
trail = [];
这些变量用于跟踪鼠标位置、图像是否已加载、轨迹和图像大小。mouse
是一个保存鼠标的X和Y坐标的数组,每次鼠标移动时都会更新,imgLoaded
在后面的函数中设置为true,表示图像已加载,因此它可以正确绘制,trail
是一个自演示开始以来保存每个鼠标位置的数组,它保存具有用于绘制轨迹的坐标的阵列,并与mouse
一起更新。
img = new Image();
img.onload = function(){
imgLoaded = true;
};
img.src = 'http://images.encyclopediadramatica.se/0/0a/Me_gusta_original.png';
该代码块创建一个图像,将其源设置为保存Me Gusta图片的可靠服务器,并更新imgLoaded
布尔值以指示现在可以绘制图像,而不是绘制图片on load
。
canvas.onmousemove=function(e){
var X,Y;
if(e.clientX){
X = e.clientX;
Y = e.clientY;
}else{
X = e.pageX;
Y = e.pageY;
}
mouse = [X,Y];
trail.push(mouse);
};
此事件函数(在事件上运行的一种特殊类型的函数)绑定到画布,当它运行时,它会从传递到参数中的e
变量中获取鼠标的位置。完成此操作后,它将坐标添加到trail
数组中。
UPDATE = function(){
ctx.clearRect(0,0,canvas.width,canvas.height);
if(imgLoaded){
for(var i = trail.length-50;i<trail.length;i++){
if(trail[i]){
ctx.drawImage(img,trail[i][0],trail[i][1],100,100);
}
}
}
setTimeout(UPDATE,1000/60);
};
UPDATE();
这就是处理其余部分的地方。函数被定义,然后立即运行,在函数完成后,它会以1000/60
毫秒的延迟或60帧/秒的速度再次运行。现在我们可以看到一些画布上的动作了!
ctx.clearRect(0,0,width,height)
清除整个画布上绘制的所有内容
现在,它通过请求imgLoaded
变量来检查图像是否已加载。如果为true,它将继续循环遍历轨迹对象,并为每个坐标绘制图像。然而,这里发生了一些非常聪明的事情。我没有在0开始i
,而是在trail.length-50
开始,并在trail.length
结束,因为在实践中,我们只想显示数组的一部分,而不是整个数组。
由于数组一开始是空的,它会检查布尔表达式trail[i]
是否返回true。如果它这样做了,那么它就继续绘制这部分轨迹。如果没有,那么它会绕过它,同时避免出现错误。循环之后,它通过再次运行自己来结束。
至于我是如何隐藏光标并获得虚线边框的,那就是CSS或级联样式表。允许精确控制页面样式的语言,以及赋予这个网站魅力的原因。
我希望这比我之前给出的答案更有帮助,该答案位于以下行:
Before reading: I apologize if it seems like I misinterpreted the question. The question is about how to detect mouse events and this works as a great beginner example to demonstrate mouse events.
在javascript中,当您将鼠标悬停在图像上时,有几种方法可以使图像显示出来,一个很好的、简单的例子是:
HTML:
<div id="img">我是一个占位符<div>
Javascript:
var img=document.getElementById('img')var Main={IN:函数(){img.innerHTML='<img src="img.jpg"><img>'},OUT:函数(){img.innerHTML="我是占位符"}}//我用了一个物体来保持函数的一致性img.onmouseover=主.INimg.onmouseout=主输出//这些事件调用函数
- 在Widget代码中使用javascript从左向右滑动光标图像
- 在Widget代码中没有jQuery的情况下,用光标图像从左滑动到右
- 图像阵列预加载时显示沙漏光标
- 使用JavaScript的带有背景图像的径向光标
- 如何使用JS捕捉带有垂直线的自定义图像光标
- Javascript用光标擦除图像
- 可以用我自己的自定义图像替换光标
- 使用Opera自定义base64图像光标-可能
- 如果光标在图像上在某种意义上不停止.它正在运行
- 使用Javascript和HTML避开光标的图像
- JavaScript 如何将鼠标光标更改为图像
- 如何将箭头光标图像更改为我的网页的手形图像
- 如何在 js 和 css3 中使用鼠标光标单击实现滚动图像
- 从 cs 页面更改图像按钮集的光标
- 使用javascript自定义光标图像
- 使用Javascript的随机光标图像
- 在没有画布的javascript中使用自定义光标图像动态更改光标大小
- 当我悬停在帖子链接上时,我可以使用帖子缩略图作为光标图像吗?(wordpress)
- 如何通过jQuery设置光标图像
- Javascript光标图像位置