在可替换图像上调用jQZoom

时间:2009-09-09 16:14:56

标签: jquery jquery-plugins zoom

我正在创建一个电子商务产品页面,它将使用jQZoom作为放大特色产品图像的一种方式。但是,我希望能够点击备用产品照片缩略图,让它不仅替换大的特色图像,还可以在新替换的特色图像上重新实例化jQZoom()函数。

所有这些都可以正常使用

问题是这个。在页面加载时应用了jQZoom()的原始特色图像仍然是一个“活动的工件”,当我悬停()替换的特色图像时,缩放效果应用于替换的图像和原始图像

////////////////////////
Product Page
///////////////////////


/////////////////////////////////////////// //
我的替换功能

function SwapPic(image, image_big)
{

  $(".jqZoomWindow").remove();
  $(".jqZoomPup").remove();

  $('img.feature').attr("src",image);
  $('#product-image a').attr("href",image_big).jqzoom({
      zoomWidth: 330,
      zoomHeight: 330,
      showEffect:'show',
      hideEffect:'fadeout',
      fadeoutSpeed: 'slow',
      xOffset :72,
      title :false
    });
}

2 个答案:

答案 0 :(得分:1)

按照我们在jQuery Function Seems...开始的主题。 你复制很多代码,但JS不是一个完全面向对象的语言,我们可以应用一些技术来避免重复代码,并利用jQuery插件

我没时间测试脚本。因此,如果有必要,您将拥有需要修改的内容。我希望它能更好地逼近你所需要的东西。

如果你为我的妻子jjejeje买衣服会有一些折扣。

(function($) {

 $.fn.SwapPic = function(options) {

  options = $.extend({
   zoomWidth: 330,
   zoomHeight: 330,
   showEffect:"show",
   hideEffect:"fadeout",
   fadeoutSpeed: "slow",
   xOffset:72,
   title:false,
   containerImgSmall: "",
   containerImgLarge: "",
   postAccion: null
  }, options || {});

  options.pthis = this;
  options.accion = function() {  

   imageSmall = $(options.pthis).attr("href"); //verifies this line
   imageLarge = $(options.pthis).attr("href").replace(/small/, "large"); //verifies this line

   options.containerImgSmall = $(options.containerImgSmall);
   options.containerImgLarge = $(options.containerImgLarge);

   //I do not know if it's necessary to do this
   if ($(".jqZoomWindow").length != 0)
    $(".jqZoomWindow").remove();

   //I do not know if it's necessary to do this
   if ($(".jqZoomPup").length != 0)
    $(".jqZoomPup").remove();

   options.containerImgSmall.attr("src", imageSmall);

   options.containerImgLarge.attr("href", imageLarge).jqzoom({
    zoomWidth:options.zoomWidth,
    zoomHeight:options.zoomHeight,
    showEffect:options.showEffect,
    hideEffect:options.hideEffect,
    fadeoutSpeed:options.fadeoutSpeed,
    xOffset:options.xOffset,
    title:options.title
   });

   if (options.postAccion!=null)
    options.postAccion.call();
  };

  $(this).bind("click", options.accion);

 };
})(jQuery);

$(document).ready(function(){

 var myPostAccion = function(){
  $('#product-images li:first').fadeIn("slow");
 };

 $(".a-class-1").SwapPic({
  containerImgSmall: "img.feature",
  containerImgLarge: "#product-image a",
  postAccion: myPostAccion
 });

 $(".a-class-2").SwapPic({
  zoomWidth: 530,
  zoomHeight: 530,
  containerImgSmall: "img.feature",
  containerImgLarge: "#product-image a",
  postAccion: myPostAccion
 });

});

HTML:

<a class="product-thumbs a-class-1" href="http://cdn.shopify.com/s/files/1/0031/5672/products/n1_small.jpg?1252565016" ><img src="http://cdn.shopify.com/s/files/1/0031/5672/products/n1_thumb.jpg?1252565016" alt="text" /></a>
<a class="product-thumbs a-class-2" href="http://cdn.shopify.com/s/files/1/0031/5672/products/n2_small.jpg?1252565016" ><img src="http://cdn.shopify.com/s/files/1/0031/5672/products/n2_thumb.jpg?1252565016" alt="text" /></a>

答案 1 :(得分:0)

这是从jqzoom清除数据的方法:

$('.jqclass').removeData('jqzoom');

因为jqzoom会将数据保存在此对象中:

$(el).data("jqzoom", obj);