如果onclick被按下,阻塞mouseout事件监听器
block mouseout event listener if onclick is pressed
我正在尝试3种不同的鼠标动作(mouseout, mouseenter和onclick),如果用户单击图像,那么mouseout事件应该被阻止。
<div class="side-thumbnail">
<img src="http://dev.kis-com.ch/wp-content/uploads/2015/08/andreas-front-bw.png" onmouseover="this.src='http://dev.kis-com.ch/wp-content/uploads/2015/08/andreas-front-active.png'" onmouseout="this.src='http://dev.kis-com.ch/wp-content/uploads/2015/08/andreas-front-bw.png'" alt="face" class="small-faceHit" data-id="firstpeople"> <br>
<img src="http://dev.kis-com.ch/wp-content/uploads/2015/08/08Georg-Front.png" onmouseover="this.src='http://dev.kis-com.ch/wp-content/uploads/2015/08/08Georg-Front-Active.png'" onmouseout="this.src='http://dev.kis-com.ch/wp-content/uploads/2015/08/08Georg-Front.png'" alt="face" class="small-faceHit" data-id="secondpeople"> <br>
.................
</div>
你可以在这里看到完整的代码
您可以实现这一点,而无需为每个项目使用两个图像,但这将需要一点javascript。
这里基本上,你只加载了彩色图像,并应用CSS滤镜使图像看起来像灰度
$(document).on('click', '.greyscale', function(){
$('.side-thumbnail img').each(function(){
if(!$(this).hasClass('greyscale'))
{
$(this).addClass('greyscale');
$(this).removeClass('selected');
}
});
$(this).removeClass('greyscale');
$(this).addClass('selected');
});
img{width:150px;}
.greyscale{
filter: gray; /* IE6-9 */
-webkit-filter: grayscale(100%); /* Chrome 19+ & Safari 6+ */
-webkit-transition: all .6s ease; /* Fade to color for Chrome and Safari */
-webkit-backface-visibility: hidden; /* Fix for transition flickering */
}
.greyscale:hover, .selected{
-webkit-filter: grayscale(0%);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="side-thumbnail">
<img src="http://dev.kis-com.ch/wp-content/uploads/2015/08/andreas-front-active.png" alt="face" class="small-faceHit greyscale" data-id="firstpeople"> <br>
<img src="http://dev.kis-com.ch/wp-content/uploads/2015/08/08Georg-Front-Active.png" alt="face" class="small-faceHit greyscale" data-id="secondpeople"> <br>
<img src="http://dev.kis-com.ch/wp-content/uploads/2015/08/02-Naomi-Front-Active.png" alt="face" class="small-faceHit greyscale" data-id="thirdpeople">
</div>
一个使用CSS过滤器的干净的基于CSS的解决方案。
https://jsfiddle.net/f1b3ugo5/CSS:img{width:150px;}
img.active, img.inactive:hover {
filter:none;
-webkit-filter: none;
-moz-filter: none;
-ie-filter: none;
-o-filter: none;
}
img.inactive {
filter:url("data:image/svg+xml;utf8,<svg version='"1.1'" xmlns='"http://www.w3.org/2000/svg'"><filter id='"grayscale'"><feColorMatrix type='"matrix'" values='"0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0'"/></filter></svg>#grayscale");
filter: gray;
-webkit-filter: grayscale(100%);
-moz-filter: grayscale(100%);
-ie-filter: grayscale(100%);
-o-filter: grayscale(100%);
}
JS:
'use strict';
var add_events = function( img, opts ){
this.image = img;
this.setup_listener();
return this;
}
add_events.prototype.activate = function(){
this.image.classList.remove('inactive');
this.image.classList.add('active');
};
add_events.prototype.deactivate = function(){
this.image.is_active = false;
this.image.classList.remove('active');
this.image.classList.add('inactive');
};
add_events.prototype.setup_listener = function(){
var _this = this;
this.image.addEventListener('click',function(e){
add_events.deactivate_all( _this );
if( this.is_active ){
_this.deactivate();
}
else{
this.is_active = true;
_this.activate();
}
},false);
};
add_events.deactivate_all = function( current ){
for( var i = 0; i < holder.length; ++i ){
if(holder[i]===current){}
else{ holder[i].deactivate(); }
}
};
var holder = [], images = document.querySelectorAll( '.small-faceHit' );
for( var i = 0; i < images.length; ++i ){
holder.push(new add_events( images[i], {}) );
}
HTML: <div class="side-thumbnail">
<img src="http://dev.kis-com.ch/wp-content/uploads/2015/08/andreas-front-active.png" alt="face" class="small-faceHit inactive" id="toggle-image" data-id="firstpeople">
<img src="http://dev.kis-com.ch/wp-content/uploads/2015/08/andreas-front-active.png" alt="face" class="small-faceHit inactive" id="toggle-image" data-id="firstpeople">
<img src="http://dev.kis-com.ch/wp-content/uploads/2015/08/andreas-front-active.png" alt="face" class="small-faceHit inactive" id="toggle-image" data-id="firstpeople">
<img src="http://dev.kis-com.ch/wp-content/uploads/2015/08/andreas-front-active.png" alt="face" class="small-faceHit inactive" id="toggle-image" data-id="firstpeople">
</div>
相关文章:
- 音频控件在mouseover上显示,在mouseout上淡出
- Gridview ImageButton更改mouseover和mouseout上的图像
- d3防止在上下文菜单上触发mouseout
- 如何为javascript promise进行阻塞并返回解析结果
- 如何在小页面中移动折叠下方的渲染阻塞javascript
- 在mouseover上添加边框,在mouseout上删除边框
- 同步(阻塞)ajax调用是否可以阻塞浏览器'的UI
- Selenium异步脚本在自己的线程中阻塞其他脚本
- Nodejs一个请求阻塞另一个请求
- 从.change()调用window.open时避免弹出阻塞
- 如何在Javascript中编写非阻塞回调
- Mouseover和Mouseout的行为没有达到预期
- 如何禁用mouseout可见性=“;隐藏的“;对小于768px的介质的影响
- Nav<ul>mouseout吗?如何修复
- Fancybox:让它在mouseover/mouseout上工作
- Google PageSpeed Insights说“删除渲染阻塞js文件”
- Javascript元素相互阻塞
- 如何从许多内部非阻塞函数调用之一中提前退出外部函数
- jQuery mouseout动画仅在第二次悬停后启动
- 如果onclick被按下,阻塞mouseout事件监听器