更改图像属性更改时的不透明度
Change opacity on image attribute change?
我正在单击(上一个/下一个按钮)时更改图像源,我想淡出图像,然后更改源并淡入,但我无法平滑过渡。我尝试在淡入淡出和更改源之间添加.delay()
但src
变化仍然发生在淡入淡出结束之前。我尝试添加.stop()
但这只会停止当前运行的动画,并且属性更改不算作动画。
var images = ['http://i.imgur.com/U82gG8H.jpg', 'http://i.imgur.com/kVy4G4R.jpg', 'http://i.imgur.com/BtMikrd.jpg'];
var count = 0;
$('.next').on('click', function() {
if (count !== images.length-1) {
count++;
$('.product_image img').fadeTo(300, 0).delay(600).attr('src', '').attr('src', images[count]).fadeTo(300, 1);
}
});
$('.previous').on('click', function() {
if (count !== 0) {
count--;
$('.product_image img').fadeTo(300, 0).delay(400).attr('src', '').attr('src', images[count]).fadeTo(300, 1);
}
});
.navigation {
display: block;
}
.navigation .previous,
.navigation .next {
width: 30px;
height: 30px;
line-height: 30px;
text-align: center;
background: #ddd;
color: #fff;
display: inline-block;
margin-right: 20px;
cursor: pointer;
}
.navigation .next {
margin-right: 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<div class="product_image">
<img src="http://i.imgur.com/U82gG8H.jpg" />
</div>
<div class="navigation">
<div class="previous"><</div>
<div class="next">></div>
</div>
任何帮助,不胜感激。
您需要使用第一个fadeTo
的回调函数,否则图像会同时淡出、更改和淡入。试试这个:
var images = ['http://i.imgur.com/U82gG8H.jpg', 'http://i.imgur.com/kVy4G4R.jpg', 'http://i.imgur.com/BtMikrd.jpg'];
var count = 0;
$('.next').on('click', function() {
if (count !== images.length - 1) {
count++;
$('.product_image img').fadeTo(300, 0, function() {
$(this).attr('src', images[count]).fadeTo(300, 1);
});
}
});
$('.previous').on('click', function() {
if (count !== 0) {
count--;
$('.product_image img').fadeTo(300, 0, function() {
$(this).attr('src', images[count]).fadeTo(300, 1);
});
}
});
.navigation {
display: block;
}
.navigation .previous,
.navigation .next {
width: 30px;
height: 30px;
line-height: 30px;
text-align: center;
background: #ddd;
color: #fff;
display: inline-block;
margin-right: 20px;
cursor: pointer;
}
.navigation .next {
margin-right: 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<div class="product_image">
<img src="http://i.imgur.com/U82gG8H.jpg" />
</div>
<div class="navigation">
<div class="previous"><</div>
<div class="next">></div>
</div>
.attr()
函数不是基于队列的方法,因此延迟不会对其产生任何影响。可以使用.delay()
将方法添加到动画队列。
预加载图像也可以改善过渡。
var images = ['http://i.imgur.com/U82gG8H.jpg', 'http://i.imgur.com/kVy4G4R.jpg', 'http://i.imgur.com/BtMikrd.jpg'];
//image preloading
images.forEach(function(src) {
var img = new Image();
img.src = src;
})
var count = 0;
$('.next').on('click', function() {
count++;
count = count >= images.length ? 0 : count;
$('.product_image img').fadeTo(300, 0).delay(600).queue(function(next) {
$(this).attr('src', images[count]);
next();
}).fadeTo(300, 1);
});
$('.previous').on('click', function() {
count--;
count = count < 0 ? images.length - 1 : count;
$('.product_image img').fadeTo(300, 0).delay(400).queue(function(next) {
$(this).attr('src', images[count]);
next();
}).fadeTo(300, 1);
});
.navigation {
display: block;
}
.navigation .previous,
.navigation .next {
width: 30px;
height: 30px;
line-height: 30px;
text-align: center;
background: #ddd;
color: #fff;
display: inline-block;
margin-right: 20px;
cursor: pointer;
}
.navigation .next {
margin-right: 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<div class="product_image">
<img src="http://i.imgur.com/U82gG8H.jpg" />
</div>
<div class="navigation">
<div class="previous"><</div>
<div class="next">></div>
</div>
使用回调函数
我建议使用此处记录的complete
回调。
回调被定义为一个函数,并添加到不透明度值之后,如下所示:
.fadeTo( duration, opacity [, complete ] )
然后,回调函数将在动画完成后触发,允许我们在图像"隐藏"时更改 src
属性,然后将其淡入淡出。
一个例子
var images = ['http://i.imgur.com/U82gG8H.jpg', 'http://i.imgur.com/kVy4G4R.jpg', 'http://i.imgur.com/BtMikrd.jpg'];
var count = 0,
productImage = $('.product_image').children('img');
$('.next').on('click', function() {
if (count !== images.length - 1) {
count++;
productImage.fadeTo(300, 0, function() {
productImage.attr('src', images[count]).fadeTo(300, 1);
});
}
});
$('.previous').on('click', function() {
if (count !== 0) {
count--;
productImage.fadeTo(300, 0, function() {
productImage.attr('src', images[count]).fadeTo(300, 1);
});
}
});
.navigation {
display: block;
}
.navigation .previous,
.navigation .next {
width: 30px;
height: 30px;
line-height: 30px;
text-align: center;
background: #ddd;
color: #fff;
display: inline-block;
margin-right: 20px;
cursor: pointer;
}
.navigation .next {
margin-right: 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<div class="product_image">
<img src="http://i.imgur.com/U82gG8H.jpg" />
</div>
<div class="navigation">
<div class="previous"><</div>
<div class="next">></div>
</div>
试试这种方法
$(img).fadeTo(200,0.70, function() {
$(img).attr("src", new_img_src);
}).fadeTo(300,1);
根据这个答案:当前正在进行的动画立即完成,当前开始。
var images = ['http://i.imgur.com/U82gG8H.jpg', 'http://i.imgur.com/kVy4G4R.jpg', 'http://i.imgur.com/BtMikrd.jpg'];
var count = 0;
$('.next').on('click', function() {
if (count !== images.length-1) {
count++;
$('.product_image img').fadeTo(300, 0).delay(600).attr('src', '').attr('src', images[count]).finish().fadeTo(300, 1);
}
});
$('.previous').on('click', function() {
if (count !== 0) {
count--;
$('.product_image img').fadeTo(300, 0).delay(400).attr('src', '').attr('src', images[count]).finish().fadeTo(300, 1);
}
});
.navigation {
display: block;
}
.navigation .previous,
.navigation .next {
width: 30px;
height: 30px;
line-height: 30px;
text-align: center;
background: #ddd;
color: #fff;
display: inline-block;
margin-right: 20px;
cursor: pointer;
}
.navigation .next {
margin-right: 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<div class="product_image">
<img src="http://i.imgur.com/U82gG8H.jpg" />
</div>
<div class="navigation">
<div class="previous"><</div>
<div class="next">></div>
</div>
完成后,您可以将 .fadeOut() 与回调函数一起使用,如下所示:
var images = ['http://i.imgur.com/U82gG8H.jpg', 'http://i.imgur.com/kVy4G4R.jpg', 'http://i.imgur.com/BtMikrd.jpg'];
var count = 0;
$('.next').on('click', function() {
if (count !== images.length - 1) {
count++;
$('.product_image img').fadeOut(300, function() {
$(this).attr('src', '').attr('src', images[count]).fadeTo(300, 1);
});
}
});
$('.previous').on('click', function() {
if (count !== 0) {
count--;
$('.product_image img').fadeOut(300, function() {
$(this).attr('src', '').attr('src', images[count]).fadeTo(300, 1);
});
}
});
.navigation {
display: block;
}
.navigation .previous,
.navigation .next {
width: 30px;
height: 30px;
line-height: 30px;
text-align: center;
background: #ddd;
color: #fff;
display: inline-block;
margin-right: 20px;
cursor: pointer;
}
.navigation .next {
margin-right: 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<div class="product_image">
<img src="http://i.imgur.com/U82gG8H.jpg" />
</div>
<div class="navigation">
<div class="previous"><</div>
<div class="next">></div>
</div>
相关文章:
- 如何更改文本框控件的不透明度值
- 对象不支持属性或方法“自动完成”
- 在js中访问元素时不透明度和样式未定义,但在css中定义
- Greenstock不透明度动画从0到1再返回
- 如何在html画布上替换ByImage()而不是drawImage()(忽略不透明度)
- 设置1400个Raphael.js对象的不透明度动画会影响动画性能
- 选中复选框时降低父级的不透明度
- 更改alphaMap不透明度不会更新(THRE.JS R76)
- 如何在页面向下滚动时获得图像以获得不透明度
- 在Materialize设计中删除转盘图像的不透明度
- 如何删除javascript中的不透明度
- 如何使用javascript在rgba中获取不透明度参数
- 如何在悬停时更改高图的不透明度
- 更改整个类的不透明度元素
- 更改图像属性更改时的不透明度
- 改变不透明度属性和应用梯度引导工具提示
- 表面背景属性的不透明度
- HTML不透明度属性vs CSS不透明度
- 在Famo.us中转换颜色(或非转换/不透明度CSS属性)的正确方式
- 如何定位 -moz-不透明度属性