实现鼠标在页面点击出现焦点及大十字星

近段时间,在完成项目进度情况显示时候,用户在操作鼠标时候,显示当鼠标所在位置对应时间如下图所示

代码实现步骤如下:

1.首先引用 jquery.1.7.js

2.再次引用raphael.js

3.然后引用graphics.js

4.最后引用mfocus.js

其中mfocus.js代码如下

var mfocus = {

config: {

"bar_dis": true, //横竖条显示或隐藏

"circle_dis": true, //焦点隐藏

"bar_color": "Yellow", //线条颜色

"circle_color": "red", //圆圈颜色

"rect_color": "green"//方块颜色

},

locationTimer: null, //时间控制标识符

onmouseClick: function (ev) {//鼠标点击获取鼠标位置画聚焦效果

var point = this.mousePosition(ev);

this.showFocus(point);

},

onclickElement: function (obj) {//鼠标点击获取坐标做焦点

var _point = this.elementPosition(obj);

this.showFocus(_point);

},

showFocus: function (point) {//显示焦点效果

if (this.locationTimer) {

clearTimeout(this.locationTimer);

} //清除定时器

var mapDiv = "#mapdiv";

var _point = point;

var canvas = $("#canvas");

var vLine = $("#vline");

var hLine = $("#hline");

//焦点隐藏或显示

if (this.config"circle_dis" == true) {

if (!$("#canvas").attr("id")) {

canvas = '<div id="canvas" style="left:' + (_point.x - 25) + 'px;top:' + (_point.y - 25) + 'px;width:50px;height:50px;overflow:hidden;position:absolute;border:solid 0px red;"/>';

$(canvas).appendTo("body");

} else {

canvas.css("left", (_point.x - 25) + "px");

canvas.css("top", (_point.y - 25) + "px");

canvas.show();

}

paper = Raphael("canvas");//需引用raphael.js

paper.clear();

var rect = paper.rect(20, 20, 10, 10, 0);

rect.attr("stroke", this.config"rect_color");

rect.attr("stroke-width", 1);

}

//是否显示横竖条

if (this.config"bar_dis" == true) {

if (!$("#vline").attr("id")) {

vLine = "<div id='vline' style='background-color:" + this.config"bar_color" + ";height:100%;width:1px;position:absolute;top:0px;left:" + (_point.x) + "px;'/>";

$(vLine).appendTo("body");

} else {

$(vLine).css("left", (_point.x) + "px");

vLine.show();

}

if (!$("#hline").attr("id")) {

var hLine = "<div id='hline' style='overflow:hidden;background-color:" + this.config"bar_color" + ";height:1px;width:100%;position:absolute;left:0px;top:" + (_point.y) + "px;'/>";

$(hLine).appendTo("body");

} else {

$("#hline").css("top", (_point.y) + "px");

hLine.show();

}

}

this.hideFocus();

return true;

}, hideFocus: function () {//隐藏焦点效果

if (paper != null) {

var circle = paper.circle(25, 25, 30);

circle.attr("stroke", this.config"circle_color");

circle.attr("stroke-width", 1);

var anim = Raphael.animation({

r: 5

}, 900, null, function () {

this.locationTimer = setTimeout(function () {

$("#canvas").hide(); //焦点

$("#vline").hide(); //横条

$("#hline").hide(); //竖条

clearTimeout(this.locationTimer);

}, 500);

});

circle.animate(anim);

} else {

this.locationTimer = setTimeout(function () {

$("#canvas").hide(); //焦点

$("#vline").hide(); //横条

$("#hline").hide(); //竖条

clearTimeout(this.locationTimer);

}, 500);

}

}, mousePosition: function (e) {

var x, y;

var e = e || window.event;

return {

x: e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft,

y: e.clientY + document.body.scrollTop + document.documentElement.scrollTop

}

}, elementPosition: function (oElement) {

var x2 = 0;

var y2 = 0;

var width = oElement.offsetWidth;

var height = oElement.offsetHeight;

var postion = "";

if (typeof (oElement.offsetParent) != 'undefined') {

for (var posX = 0, posY = 0; oElement; oElement = oElement.offsetParent) {

posX += oElement.offsetLeft;

posY += oElement.offsetTop;

}

x2 = posX + width;

y2 = posY + height;

postion = posX, posY, x2, y2;

} else {

x2 = oElement.x + width;

y2 = oElement.y + height;

postion = oElement.x, oElement.y, x2, y2;

}

var x = postion0 + ((postion2 - postion0) / 2);

var y = postion1 + ((postion3 - postion1) / 2);

return { "x": x, "y": y };

}

}

复制代码
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript" src="js/jquery.1.7.js"></script>
<script type="text/javascript" src="js/raphael.js"></script>
<script type="text/javascript" src="js/graphics.js"></script>
<script type="text/javascript" src="js/mfocus.js"></script>
<title>qfocus</title>
<script type="text/javascript">
function forward(ev){ 
	mfocus.onmouseClick(ev);
}
document.οnmοusedοwn=forward;
</script>
</head>
<body>
</body>
</html>
相关推荐
麦麦麦当劳大王3 小时前
【油猴脚本】Boss直聘 岗位职责复制
开发语言·前端·javascript
只睡四小时4 小时前
Three.js Sub-tick:漏判 60.7%→0
开发语言·javascript·性能优化·ecmascript·游戏开发·three.js·碰撞检测
excel5 小时前
基于 GPT 的自动发布文章接口方案:从一句话或一张图片生成并发布内容
前端·javascript·后端
OpsEye10 小时前
大模型 Token 计量不准,是什么原因,怎么解决??
javascript·ai编程
独隅12 小时前
WebStorm Windows 版 React / Next.js 实战替换指南
javascript·windows·webstorm
冷眸_12 小时前
同名食材不能直接相减:一个 JavaScript 用量模型的边界
javascript
apollo_qwe12 小时前
接口超时了,前端为什么不能直接重试?
javascript·http
toooooop817 小时前
CRMEB 故障排查笔记:安全网关只放行 GET/POST 怎么办
前端·javascript·vue.js·thinkphp6·crmeb
软件技术NINI17 小时前
基于SpringBoot和Vue的项目评审系统
javascript·vue.js·spring boot·后端·spring·毕业设计·毕设
vipxieliang17 小时前
JavaScript 模板字符串与标签模板:不只是拼接
前端·javascript