gpt4 book ai didi

javascript - 多次触发 jQuery 动画 API

转载 作者:太空宇宙 更新时间:2023-11-04 06:06:22 25 4
gpt4 key购买 nike

我想结合图像源交换淡入/淡出来制作翻转图像效果使用 jQuery 动画 API 旋转 Y 动画。但有时它会产生奇怪的结果,如果鼠标光标在图像区域中被拖动(在 mouseenter 动画完成之前)几次,动画就会触发多次

代码:

$(document).ready(function() {

$("img[data-alt-src]")
.mouseenter(function() {
var img = $(this);
img.finish().animate({ opacity: '-=1.0', deg: '+=90' }, {
duration: 250,
step: function(now) {
img.css({
'-moz-transform': 'rotateY('+now+'deg)',
'-webkit-transform': 'rotateY('+now+'deg)',
'-o-transform': 'rotateY('+now+'deg)',
'-ms-transform': 'rotateY('+now+'deg)',
transform: 'rotateY('+now+'deg)'
});
},
complete: function() {
img.data('tmp-src', img.attr('src'));
img.attr('src', img.data('alt-src'));
}
});
img.animate({ opacity: '+=1.0', deg: '-=90' }, {
duration: 250,
step: function(now) {
img.css({
'-moz-transform': 'rotateY('+now+'deg)',
'-webkit-transform': 'rotateY('+now+'deg)',
'-o-transform': 'rotateY('+now+'deg)',
'-ms-transform': 'rotateY('+now+'deg)',
transform: 'rotateY('+now+'deg)'
});
}
});
})
.mouseleave(function() {
var img = $(this);
img.finish().animate({ opacity: '-=1.0', deg: '+=90' }, {
duration: 250,
step: function(now) {
img.css({
'-moz-transform': 'rotateY('+now+'deg)',
'-webkit-transform': 'rotateY('+now+'deg)',
'-o-transform': 'rotateY('+now+'deg)',
'-ms-transform': 'rotateY('+now+'deg)',
transform: 'rotateY('+now+'deg)'
});
},
complete: function() {
img.attr('src', img.data('tmp-src'));
}
});
img.animate({ opacity: '+=1.0', deg: '-=90' }, {
duration: 250,
step: function(now) {
img.css({
'-moz-transform': 'rotateY('+now+'deg)',
'-webkit-transform': 'rotateY('+now+'deg)',
'-o-transform': 'rotateY('+now+'deg)',
'-ms-transform': 'rotateY('+now+'deg)',
transform: 'rotateY('+now+'deg)'
});
}
});
});

});
img {
width: 150px;
height: 150px;
margin-right: 1.5em;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>

<div style="position: relative; display: inline-block">
<img
src="http://mcenter.lazim.org/image/cache/catalog/demo/nikon_d300_1-270x270.jpg"
data-alt-src="http://mcenter.lazim.org/image/cache/catalog/demo/nikon_d300_3-270x270.jpg"
alt="">
<img
src="http://mcenter.lazim.org/image/cache/catalog/demo/nikon_d300_1-270x270.jpg"
data-alt-src="http://mcenter.lazim.org/image/cache/catalog/demo/nikon_d300_3-270x270.jpg"
alt="">
<img
src="http://mcenter.lazim.org/image/cache/catalog/demo/nikon_d300_1-270x270.jpg"
data-alt-src="http://mcenter.lazim.org/image/cache/catalog/demo/nikon_d300_3-270x270.jpg"
alt="">
<img
src="http://mcenter.lazim.org/image/cache/catalog/demo/nikon_d300_1-270x270.jpg"
data-alt-src="http://mcenter.lazim.org/image/cache/catalog/demo/nikon_d300_3-270x270.jpg"
alt="">
</div>

</body>
</html>

输出: enter image description here

PS:如果我从控制台登录,控制台还会在一个 mouseenter 事件中触发多个日志。

如有任何帮助,我们将不胜感激。 TiA.

最佳答案

$(function() {

$("img[data-alt-src]").on('mouseenter', function(e) {
e.stopPropagation();
e.preventDefault();
var img$ = $(e.currentTarget);
if (img$.hasClass('opened')) {
return false;
} else {
img$.addClass('opened');
}
img$.finish().animate({
opacity: '-=1.0',
deg: '+=90'
}, {
duration: 250,
step: function(now) {
img$.css({
'-moz-transform': 'rotateY(' + now + 'deg)',
'-webkit-transform': 'rotateY(' + now + 'deg)',
'-o-transform': 'rotateY(' + now + 'deg)',
'-ms-transform': 'rotateY(' + now + 'deg)',
transform: 'rotateY(' + now + 'deg)'
});
},
complete: function() {
img$.data('tmp-src', img$.attr('src'));
img$.attr('src', img$.data('alt-src'));
}
});
img$.animate({
opacity: '+=1.0',
deg: '-=90'
}, {
duration: 250,
step: function(now) {
img$.css({
'-moz-transform': 'rotateY(' + now + 'deg)',
'-webkit-transform': 'rotateY(' + now + 'deg)',
'-o-transform': 'rotateY(' + now + 'deg)',
'-ms-transform': 'rotateY(' + now + 'deg)',
transform: 'rotateY(' + now + 'deg)'
});
}
});
})
.on('mouseleave', function(e) {
e.stopPropagation();
e.preventDefault();
var img$ = $(e.currentTarget);
img$.removeClass('opened')
img$.finish().animate({
opacity: '-=1.0',
deg: '+=90'
}, {
duration: 250,
step: function(now) {
img$.css({
'-moz-transform': 'rotateY(' + now + 'deg)',
'-webkit-transform': 'rotateY(' + now + 'deg)',
'-o-transform': 'rotateY(' + now + 'deg)',
'-ms-transform': 'rotateY(' + now + 'deg)',
transform: 'rotateY(' + now + 'deg)'
});
},
complete: function() {
img$.attr('src', img$.data('tmp-src'));
}
});
img$.animate({
opacity: '+=1.0',
deg: '-=90'
}, {
duration: 250,
step: function(now) {
img$.css({
'-moz-transform': 'rotateY(' + now + 'deg)',
'-webkit-transform': 'rotateY(' + now + 'deg)',
'-o-transform': 'rotateY(' + now + 'deg)',
'-ms-transform': 'rotateY(' + now + 'deg)',
transform: 'rotateY(' + now + 'deg)'
});
}
});
});

});
img {
width: 150px;
height: 150px;
margin-right: 1.5em;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>

<body>

<div style="position: relative; display: inline-block">
<img src="http://mcenter.lazim.org/image/cache/catalog/demo/nikon_d300_1-270x270.jpg" data-alt-src="http://mcenter.lazim.org/image/cache/catalog/demo/nikon_d300_3-270x270.jpg" alt="">
<img src="http://mcenter.lazim.org/image/cache/catalog/demo/nikon_d300_1-270x270.jpg" data-alt-src="http://mcenter.lazim.org/image/cache/catalog/demo/nikon_d300_3-270x270.jpg" alt="">
<img src="http://mcenter.lazim.org/image/cache/catalog/demo/nikon_d300_1-270x270.jpg" data-alt-src="http://mcenter.lazim.org/image/cache/catalog/demo/nikon_d300_3-270x270.jpg" alt="">
<img src="http://mcenter.lazim.org/image/cache/catalog/demo/nikon_d300_1-270x270.jpg" data-alt-src="http://mcenter.lazim.org/image/cache/catalog/demo/nikon_d300_3-270x270.jpg" alt="">
</div>

</body>

</html>

看看这个:)

关于javascript - 多次触发 jQuery 动画 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56824907/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com