$(function () {
function setRedBall(r) {
var $wrap = $('.wrap');
var radius = r;
var w = radius * 2;
var h = radius * 2;
var x, y, offset;
return function (e) {
offset = $(this).offset();
x = e.pageX - offset.left;
y = e.pageY - offset.top;
$('<span class="red-ball">').css({
left: x - radius,
top: y - radius,
width: w,
height: h
}).appendTo(this);
}
}
$('.wrap').on('click', setRedBall(20))
})
发布评论
评论(3)
@PiLee 嗨 你好,当设置热点的时候,点击的位置是在className为ball的区域时候,是有问题的,如下图。
本质上是没有正确的获取问题中所需要的鼠标位置坐标
问题中所需要的鼠标位置应该是相对于热点图的位置,而
e.offsetX
,e.offsetY
则是鼠标相对于当前点击元素的位置关系。预览 因为图片链接的是百度下的,可能不能正常显示
html
sass
js
效果
谢谢@谦龙 指正错误,的确没有考虑到当点击发生在红点上面的情况。
offsetX和offsetY是鼠标相对于目标事件的父元素的内边界在x,y坐标上的位置。
所以点击发生在红点上就为0了
那么是要采用@谦龙的办法,用e.pageX和e.pageY获取鼠标指针位置再减去父元素(图片)相对于文档的位置及半径,便可以得到圆心相对于父元素(图片)的位置了。
再用调整
position:absoulute;
的top
和left
值并新建DOM加到图片层就好了。写了个简单的例子,可以参考下
直接绑定click的事件,事件里面根据当前event的坐标点添加DOM进去,DOM的display可以是absolute,然后left top根据event的坐标点设置,手机码子,只好说思路