2010-09-27 48 views
0

这是关于(MooTools的类)kwicks jQuery插件:http://www.jeremymartin.name/projects.php?project=kwicks插件:jQuery的Kwicks完美的作品与jQuery 1.2.6而不是1.4.2

我有同样的问题,因为这家伙在这里jquery kwicks issue(kwicks对于jquery在测试网站上工作良好,但不在活网站上),但在我的情况下,我知道问题是什么,我只能找到答案,并且Kwicks插件不再处于积极的发展状态。

我认为问题出在Jquery版本上。 这个插件与1.2.6很好,但在1.4.2上它不会工作。我试图检查插件的代码,但我不知道如何将其升级到1.4.2 Jquery兼容。

我从来没有使用1.2.6所以我不知道我需要改变,以使其工作1.4.2。

请帮忙。谢谢!

P.S>请在下面找到插件的源代码(与Jquery 1.2.6兼容)。

(function($){ 
$.fn.kwicks = function(options) { 
    var defaults = { 
     isVertical: false, 
     sticky: false, 
     defaultKwick: 0, 
     event: 'mouseover', 
     spacing: 0, 
     duration: 500 
    }; 
    var o = $.extend(defaults, options); 
    var WoH = (o.isVertical ? 'height' : 'width'); // WoH = Width or Height 
    var LoT = (o.isVertical ? 'top' : 'left'); // LoT = Left or Top 

    return this.each(function() { 
     container = $(this); 
     var kwicks = container.children('li'); 
     var normWoH = kwicks.eq(0).css(WoH).replace(/px/,''); // normWoH = Normal Width or Height 
     if(!o.max) { 
      o.max = (normWoH * kwicks.size()) - (o.min * (kwicks.size() - 1)); 
     } else { 
      o.min = ((normWoH * kwicks.size()) - o.max)/(kwicks.size() - 1); 
     } 
     // set width of container ul 
     if(o.isVertical) { 
      container.css({ 
       width : kwicks.eq(0).css('width'), 
       height : (normWoH * kwicks.size()) + (o.spacing * (kwicks.size() - 1)) + 'px' 
      });     
     } else { 
      container.css({ 
       width : (normWoH * kwicks.size()) + (o.spacing * (kwicks.size() - 1)) + 'px', 
       height : kwicks.eq(0).css('height') 
      });     
     } 

     // pre calculate left or top values for all kwicks but the first and last 
     // i = index of currently hovered kwick, j = index of kwick we're calculating 
     var preCalcLoTs = []; // preCalcLoTs = pre-calculated Left or Top's 
     for(i = 0; i < kwicks.size(); i++) { 
      preCalcLoTs[i] = []; 
      // don't need to calculate values for first or last kwick 
      for(j = 1; j < kwicks.size() - 1; j++) { 
       if(i == j) { 
        preCalcLoTs[i][j] = o.isVertical ? j * o.min + (j * o.spacing) : j * o.min + (j * o.spacing); 
       } else { 
        preCalcLoTs[i][j] = (j <= i ? (j * o.min) : (j-1) * o.min + o.max) + (j * o.spacing); 
       } 
      } 
     } 

     // loop through all kwick elements 
     kwicks.each(function(i) { 
      var kwick = $(this); 
      // set initial width or height and left or top values 
      // set first kwick 
      if(i === 0) { 
       kwick.css(LoT, '0px'); 
      } 
      // set last kwick 
      else if(i == kwicks.size() - 1) { 
       kwick.css(o.isVertical ? 'bottom' : 'right', '0px'); 
      } 
      // set all other kwicks 
      else { 
       if(o.sticky) { 
        kwick.css(LoT, preCalcLoTs[o.defaultKwick][i]); 
       } else { 
        kwick.css(LoT, (i * normWoH) + (i * o.spacing)); 
       } 
      } 
      // correct size in sticky mode 
      if(o.sticky) { 
       if(o.defaultKwick == i) { 
        kwick.css(WoH, o.max + 'px'); 
        kwick.addClass('active'); 
       } else { 
        kwick.css(WoH, o.min + 'px'); 
       } 
      } 
      kwick.css({ 
       margin: 0, 
       position: 'absolute' 
      }); 

      kwick.bind(o.event, function() { 
       // calculate previous width or heights and left or top values 
       var prevWoHs = []; // prevWoHs = previous Widths or Heights 
       var prevLoTs = []; // prevLoTs = previous Left or Tops 
       kwicks.stop().removeClass('active'); 
       for(j = 0; j < kwicks.size(); j++) { 
        prevWoHs[j] = kwicks.eq(j).css(WoH).replace(/px/, ''); 
        prevLoTs[j] = kwicks.eq(j).css(LoT).replace(/px/, ''); 
       } 
       var aniObj = {}; 
       aniObj[WoH] = o.max; 
       var maxDif = o.max - prevWoHs[i]; 
       var prevWoHsMaxDifRatio = prevWoHs[i]/maxDif; 
       kwick.addClass('active').animate(aniObj, { 
        step: function(now) { 
         // calculate animation completeness as percentage 
         var percentage = maxDif != 0 ? now/maxDif - prevWoHsMaxDifRatio : 1; 
         // adjsut other elements based on percentage 
         kwicks.each(function(j) { 
          if(j != i) { 
           kwicks.eq(j).css(WoH, prevWoHs[j] - ((prevWoHs[j] - o.min) * percentage) + 'px'); 
          } 
          if(j > 0 && j < kwicks.size() - 1) { // if not the first or last kwick 
           kwicks.eq(j).css(LoT, prevLoTs[j] - ((prevLoTs[j] - preCalcLoTs[i][j]) * percentage) + 'px'); 
          } 
         }); 
        }, 
        duration: o.duration, 
        easing: o.easing 
       }); 
      }); 
     }); 
     if(!o.sticky) { 
      container.bind("mouseleave", function() { 
       var prevWoHs = []; 
       var prevLoTs = []; 
       kwicks.removeClass('active').stop(); 
       for(i = 0; i < kwicks.size(); i++) { 
        prevWoHs[i] = kwicks.eq(i).css(WoH).replace(/px/, ''); 
        prevLoTs[i] = kwicks.eq(i).css(LoT).replace(/px/, ''); 
       } 
       var aniObj = {}; 
       aniObj[WoH] = normWoH; 
       var normDif = normWoH - prevWoHs[0]; 
       kwicks.eq(0).animate(aniObj, { 
        step: function(now) { 
         var percentage = normDif != 0 ? (now - prevWoHs[0])/normDif : 1; 
         for(i = 1; i < kwicks.size(); i++) { 
          kwicks.eq(i).css(WoH, prevWoHs[i] - ((prevWoHs[i] - normWoH) * percentage) + 'px'); 
          if(i < kwicks.size() - 1) { 
           kwicks.eq(i).css(LoT, prevLoTs[i] - ((prevLoTs[i] - ((i * normWoH) + (i * o.spacing))) * percentage) + 'px'); 
          } 
         } 
        }, 
        duration: o.duration, 
        easing: o.easing 
       }); 
      }); 
     } 
    }); 
};})(jQuery); 
+0

有什么问题,在IE和FF正常工作你有吗?我在这里设置了他们的第一个例子,在1.4.2上没有任何明显的问题:http://jsfiddle.net/nick_craver/TZqEN/ – 2010-09-27 11:03:11

+0

这真的很奇怪。我在我的本地主机上做了同样的事情,但没有成功。谢谢,让我看看它并回复你! (P.S>我第一次看到jsFiddle网站,太棒了!) – Cogicero 2010-09-27 11:42:16

+0

@Nick:我发现问题了!从项目网站上下载的压缩和最小化版本似乎有问题,现在我正在使用解压缩版本,并且它完美地工作。再次感谢jsFiddle!你让我今天很开心! :D – Cogicero 2010-09-27 11:53:22

回答

2

感谢尼克Craver和http://jsfiddle.net/(见原帖评论),我发现这个问题!从项目网站上下载的压缩和最小化版本似乎有问题,现在我正在使用解压缩版本,并且它完美地工作。

下载解压后的版本(或者只是复制代码,因为我粘贴在上面的OP中),你应该很好。然后自己打包,如果你想;-) http://kwicks.googlecode.com/svn/branches/v1.5.1/Kwicks/jquery.kwicks-1.5.1.js

StackOverflow rocks!

0

我有同样的问题。在FF中,使用jquery 1.4.2 wkicks plugind不工作。我改线28

旧线

var kwicks = container.children('li'); 

通过

var kwicks = container.find('li'); 

替换后再插件使用jQuery的1.4.2版本

+0

这很有趣! :)在我自己的案例中,我没有看到这个问题。感谢分享,尤利西斯...... – Cogicero 2010-10-21 12:07:27