【问题标题】:jQuery - preload images based on anchor classjQuery - 基于锚类预加载图像
【发布时间】:2012-05-11 12:14:49
【问题描述】:

所以我有以下 HTML:

<ul id="nav">
    <li><a href="somepage1.php" class="class1">Link1</a></li>
    <li><a href="somepage2.php" class="class2">Link2</a></li>
</ul>

jquery函数:

(function($) {
    var imgList = [];
    $.extend({
        preload: function(imgArr, option) {
            var setting = $.extend({
                init: function(loaded, total) {},
                loaded: function(img, loaded, total) {},
                loaded_all: function(loaded, total) {}
            }, option);
            var total = imgArr.length;
            var loaded = 0;

            setting.init(0, total);
            for(var i in imgArr) {
                imgList.push($("<img />")
                    .attr("src", imgArr[i])
                    .load(function() {
                        loaded++;
                        setting.loaded(this, loaded, total);
                        if(loaded == total) {
                            setting.loaded_all(loaded, total);
                        }
                    })
                );
            }

        }
    });
})(jQuery);

和文档就绪触发器(简化):

$.preload([
    'path/to/image.jpg',
    'path/to/image2.jpg',
    'path/to/image3.jpg',
    'path/to/image4.jpg',
]);

效果很好,但我需要改进它。 当用户单击类“class1”的锚点时,预加载器应读取分配给特定数组的图像。 我只需要写一次'$.preload'。

所以我的想法是创建两个不同的数组,例如:

var arraysClass1 = [
    'path/to/image.jpg',
    'path/to/image2.jpg',
    'path/to/image3.jpg',
    'path/to/image4.jpg'
];

var arraysClass2 = [
    'path/to/image5.jpg',
    'path/to/image6.jpg',
    'path/to/image7.jpg',
    'path/to/image8.jpg'
];

然后创建如下所示的文档就绪事件。 我卡在这里,下面的代码有错误

$('#nav a').live("click", (function(event){
    event.preventDefault();
    var getClass = '.'+$(this).attr("class");
    $(function() {
        $.preload([
            if(getClass=='.class1'){
                arrayClass1;
            }
            elseif(getClass=='.class2'){
                arrayClass2;
            }

        ]);
    });

我不知道如何在 $.preload([...]); 中创建 'IF' 逻辑;

【问题讨论】:

    标签: jquery preloader preload image-preloader


    【解决方案1】:

    下面是代码块,可以满足您的需求:

    $('#nav a').live("click", function(event){
        event.preventDefault();
        usearr='';
        if ($(this).attr("class")=="class1") {
            usearr=arraysClass1;
        } else if ($(this).attr("class")=="class2") {
            usearr=arraysClass2;
        }
        $.preload(usearr);
    });
    

    【讨论】:

      【解决方案2】:

      你为什么不找出 $.preload([]) 之外的适当对象,如下所示。

      $('#nav a').live("click", (function(event){
          event.preventDefault();
          var getClass = '.'+$(this).attr("class");
          var targetObj ;
           if(getClass=='.class1'){
                      targetObj = arrayClass1;
           }
           else if(getClass=='.class2'){
                      targetObj = arrayClass2;
           }  
              $.preload(targetObj);
      });
      

      并且您不需要在点击回调中使用另一个 $(function())

      【讨论】:

      • 谢谢乔伊!我删除了额外的 $(function())。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多