我对jQuery很新,只有很少的编程经验所以请考虑到这一点。
我创建了一个省时的脚本,它将采用以下两个变量:
1)元素(包含单个图像) - imgelement
2)悬停图片的图片网址 - hoverimageurl
代码:
/* Image Hover Script (Start) */
var imgelement = "#element"; /* Element containing the original image */
var hoverimageurl = "http://www.domain.com/image.png2"; /* Image URL of the hover image */
jQuery(document).ready(function() {
/* Add CSS and a class to the original image to fix positioning and give it an identification */
jQuery(imgelement + " img").addClass("originalimage");
/* Prepend hover image to the element. Set the SRC to the hover image URL */
jQuery(imgelement).prepend('<img class="hoverimage" src="' + hoverimageurl + '">');
/* Fade out original image and fade in hover image on hover */
jQuery(imgelement).hover(function() {
jQuery(imgelement + " .originalimage").stop(true).fadeTo(1000, 0);
jQuery(imgelement + " .hoverimage").stop(true).fadeTo(1000, 1);
}, function() {
jQuery(imgelement + " .hoverimage").stop(true).fadeTo(1000, 0);
jQuery(imgelement + " .originalimage").stop(true).fadeTo(1000, 1);
});
});
/* Image Hover Script (End) */
/* Image Hover CSS (Start) */
#pix-fe .originalimage {
position: relative;
}
#pix-fe .hoverimage {
position: absolute;
width: 100%;
height: 100%;
}
/* Image Hover CSS (End) */
<div class="element">
<a href="http://www.domain.com"><img src="http://www.domain.com/image1.png"></a>
</div>
当元素悬停时,脚本的作用是淡化到hoverimageurl
变量给出的悬停图像。这很好用,但我想使用这个脚本的多个实例,为此我需要为我需要的每个实例附加一个递增数字的变量名。这是低效的,因为在理想情况下我需要重复每个实例的脚本,我只想要一个变量列表和一个主脚本实例。
有什么办法可以实现这段代码的泛化吗?我知道this
,但imgelement
将始终引用imgelement
变量的值,因此据我所知,我无法看到如何做到这一点。
非常感谢你的时间。
答案 0 :(得分:3)
没有什么小css无法处理:)
.image-switch {
position: relative;
}
.image-switch img {
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
opacity: 1;
transition: opacity 1s
}
.image-switch:hover img:last-child{
opacity: 0
}
&#13;
<span class="image-switch">
<img src="http://placehold.it/200x200/FF0000">
<img src="http://placehold.it/200x200">
</span>
&#13;
答案 1 :(得分:0)
你应该使用css做这样的事情,因为它比js更可靠,更容易理解。这说明这是一个了解jQuery插件的好机会,以及如何利用它来使代码更加干燥和可重复使用。
要向jQuery对象添加新方法,您可以在jQuery.fn
上声明一个函数,即prototype
。
this
中的将绑定到您选择的元素集合,因此如果您计划对集合进行api处理,则需要对其进行调用。
从那里你只需要将功能添加到该功能。任何参数都将传递给您的函数,以便您可以在运行时传递设置。这里它用于传递img url。
我使用的另一个基本功能是jQuery.fn.find
,因为我们有可以遍历dom的参考元素,而不是使用对我来说更容易混淆的字符串。
要运行该插件,您只需要创建一个jQuery选择器并调用您的新方法。 $('#selector').hoverImage('url')
现在您已经了解了创建jQuery插件的基础知识,您应该真正弄清楚如何使用纯css实现相同的结果。
/*
* jQuery hoverImage plugin
*
* @param {string} url url of the hover image
*/
(function() {
jQuery.fn.hoverImage = function(url) {
// loop over the element collection
this.each(function() {
// bind your functionality
var $this = $(this)
var $img = $this.find('img')
var $hover = $('<img class="hoverimage" src="' + url + '">')
$this.prepend($hover)
$this.hover(function() {
$img.stop().fadeTo(1000,0)
$hover.stop().fadeTo(1000,1)
}, function() {
$img.stop().fadeTo(1000,1)
$hover.stop().fadeTo(1000,0)
})
})
}
})()
// run your plugin
$('#element').hoverImage('http://lorempixel.com/400/200/')
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="element"></div>