jQuery-在新图像上运行函数
时间:2020-03-06 14:42:57 来源:igfitidea点击:
我是jQuery新手,因此答案很简单:
我有一张图片,我想用它做几件事。
当用户单击"缩放"图标时,我正在运行" imagetool"插件(http://code.google.com/p/jquery-imagetool/)以加载较大版本的图像。该插件会在图片周围创建一个新的div,并允许用户平移。
当用户单击另一幅图像时,我将删除旧的图像并加载新的图像。
当用户单击备用图像,然后单击"缩放"按钮时,就会出现问题。imagetool插件会创建新的div,但是图像会显示在它之后
代码如下:
// Product Zoom (jQuery)
$(document).ready(function(){
$("#productZoom").click(function() {
// Set new image src
var imageSrc = $("#productZoom").attr("href");
$("#productImage").attr('src', imageSrc);
// Run the imagetool plugin on the image
$(function() {
$("#productImage").imagetool({
viewportWidth: 300,
viewportHeight: 300,
topX: 150,
topY: 150,
bottomX: 450,
bottomY: 450
});
});
return false;
});
});
// Alternative product photos (jQuery)
$(document).ready(function(){
$(".altPhoto").click(function() {
$('#productImageDiv div.viewport').remove();
$('#productImage').remove();
// Set new image src
var altImageSrc = $(this).attr("href");
$("#productZoom").attr('href', altImageSrc);
var img = new Image();
$(img).load(function () {
$(this).hide();
$('#productImageDiv').append(this);
$(this).fadeIn();
}).error(function () {
// notify the user that the image could not be loaded
}).attr({
src: altImageSrc,
id: "productImage"
});
return false;
});
});
在我看来,一旦将imagetool插件替换为新的图像,它便不再能看到#productImage图像...所以我认为这与绑定有关吗?就像是因为在页面加载后将新图像添加到dom一样,iamgetool插件无法再正确使用它...是吗?
如果是这样,有什么想法如何处理吗?
解决方案
我们可以尝试将productZoom.click()函数抽象为一个命名函数,然后在更改为备用图像后将其重新绑定。就像是:
// Product Zoom (jQuery)
$(document).ready(function(){
$("#productZoom").click(bindZoom);
// Alternative product photos (jQuery)
$(".altPhoto").click(function() {
$('#productImageDiv div.viewport').remove();
$('#productImage').remove();
// Set new image src
var altImageSrc = $(this).attr("href");
$("#productZoom").attr('href', altImageSrc);
var img = new Image();
$(img).load(function () {
$(this).hide();
$('#productImageDiv').append(this);
$(this).fadeIn();
}).error(function () {
// notify the user that the image could not be loaded
}).attr({
src: altImageSrc,
id: "productImage"
});
$("#productZoom").click(bindZoom);
return false;
});
});
function bindZoom() {
// Set new image src
var imageSrc = $("#productZoom").attr("href");
$("#productImage").attr('src', imageSrc);
// Run the imagetool plugin on the image
$(function() {
$("#productImage").imagetool({
viewportWidth: 300,
viewportHeight: 300,
topX: 150,
topY: 150,
bottomX: 450,
bottomY: 450
});
});
return false;
}
同样,将两个ready()块都滚动到同一块中。
首先,我有一个问题,.altPhoto链接还是图像?原因是如果它的图像则此行是错误的
var altImageSrc = $(this).attr("href");
它应该是
var altImageSrc = $(this).attr("src");
这是我一眼就能找到的唯一东西
嘿!我自己整理出来的...
原来,如果我完全删除了包含div的内容,然后用.html重写它,则imagetool插件会再次识别它。
对感兴趣的人的修改代码:
$(document).ready(function(){
// Product Zoom (jQuery)
$("#productZoom").click(function() {
$('#productImage').remove();
$('#productImageDiv').html('<img src="" id="productImage">');
// Set new image src
var imageSrc = $("#productZoom").attr("href");
$("#productImage").attr('src', imageSrc);
// Run the imagetool plugin on the image
$(function() {
$("#productImage").imagetool({
viewportWidth: 300,
viewportHeight: 300,
topX: 150,
topY: 150,
bottomX: 450,
bottomY: 450
});
});
return false;
});
// Alternative product photos (jQuery)
$(".altPhoto").click(function() {
$('#productImageDiv div.viewport').remove();
$('#productImage').remove();
// Set new image src
var altImageSrc = $(this).attr("href");
// Set new image Zoom link (from the ID... is that messy?)
var altZoomLink = $(this).attr("id");
$("#productZoom").attr('href', altZoomLink);
var img = new Image();
$(img).load(function () {
$(this).hide();
$('#productImageDiv').append(this);
$(this).fadeIn();
}).error(function () {
// notify the user that the image could not be loaded
}).attr({
src: altImageSrc,
id: "productImage"
});
return false;
});
});

