如果一个超文本标记语言元素(例如div)有一个CSS背景图片,是否可以指定一个当用户点击背景图片时触发的事件处理程序,而不是元素的任何其他部分?
如果是这样的话,我们将非常感谢一个JQuery示例。
发布于 2011-11-09 06:28:32
虽然不可能检测到在背景图片上的点击,但你可以使用一些聪明的JS和CSS魔法,在背景图片上设计一个掩蔽元素,比如:http://jsfiddle.net/ahmednuaman/75Rxu/,这是代码:
HTML:
<div id="bg_img_1"></div>
<div id="bg_img_2">
<div id="hit"></div>
</div>CSS:
div
{
display: block;
position: relative;
width: 200px;
height: 200px;
background-repeat: no-repeat;
background-position: center center;
}
#bg_img_1
{
background-image: url('http://placekitten.com/100/100');
}
#bg_img_2
{
background-image: url('http://placekitten.com/100/100');
}
#hit
{
display: block;
position: absolute;
width: 100px;
height: 100px;
background: #000000;
opacity: .3;
margin: 50px;
}JS:
function handleClick(e)
{
console.log(e.target.id);
}
$( '#bg_img_1' ).click( handleClick );
$( '#hit' ).click( handleClick );发布于 2012-08-10 02:21:34
我认为有一个更好更简单的方法来实现这一点,这是我的解决方案
$(document).ready(function() {
$("*").click(function(event)
{
if(event.target.nodeName == 'BODY')
{
alert('you have just clicked the body background');
}
});发布于 2011-11-09 06:56:14
这是一个非常基本的代码,它只在x轴上工作,以显示注入一个带有背景图像URL值的img元素作为它的src,并检测背景图像的高度和宽度来计算点击是否发生在背景图像上。
这段代码需要大量的改进。它不能在y轴上工作。此外,background-position和background-size也没有参与其中。但添加这些期货很容易。
下面是:
下面是jQuery代码:
$('#d').bind('click', function(e){
var d = $(this),
bg = {};
//insert an image to detect background-image image size
$('body').append(
$('<img/>').attr('src',
d.css('background-image').split('(')[1].split(')')[0]
).attr('class', 'testImage'));
bg.h = $('.testImage').height();
bg.w = $('.testImage').width();
console.log(bg, e.offsetX, $('.testImage').width());
if(e.offsetX > $('.testImage').width()){
$('#l').text('it was NOT on background-image');
}
else{
$('#l').text('it was on background-image');
}
$('.testImage').hide();
})https://stackoverflow.com/questions/8057747
复制相似问题