0

我正在测试流沙脚本来过滤一些图像。

我已经用一些图像DEMO HERE实现了脚本。
如您所见,有不同颜色的圆形、五边形和三角形。
由于这个内联脚本,过滤器工作正常:

<script type="text/javascript" charset="utf-8">
    (function($) {
        $.fn.sorted = function(customOptions) {
            var options = {
                reversed: false,
                by: function(a) {
                    return a.text();
                }
            };
            $.extend(options, customOptions);

            $data = $(this);
            arr = $data.get();
            arr.sort(function(a, b) {

                var valA = options.by($(a));
                var valB = options.by($(b));
                if (options.reversed) {
                    return (valA < valB) ? 1 : (valA > valB) ? -1 : 0;              
                } else {        
                    return (valA < valB) ? -1 : (valA > valB) ? 1 : 0;  
                }
            });
            return $(arr);
        };

    })(jQuery);

    $(function() {

      var read_button = function(class_names) {
        var r = {
          selected: false,
          type: 0
        };
        for (var i=0; i < class_names.length; i++) {
          if (class_names[i].indexOf('selected-') == 0) {
            r.selected = true;
          }
          if (class_names[i].indexOf('segment-') == 0) {
            r.segment = class_names[i].split('-')[1];
          }
        };
        return r;
      };

      var determine_sort = function($buttons) {
        var $selected = $buttons.parent().filter('[class*="selected-"]');
        return $selected.find('a').attr('data-value');
      };

      var determine_kind = function($buttons) {
        var $selected = $buttons.parent().filter('[class*="selected-"]');
        return $selected.find('a').attr('data-value');
      };

      var $preferences = {
        duration: 800,
        easing: 'easeInOutQuad',
        adjustHeight: false
      };

      var $list = $('#list');
      var $data = $list.clone();

      var $controls = $('ul.splitter ul');

      $controls.each(function(i) {

        var $control = $(this);
        var $buttons = $control.find('a');

        $buttons.bind('click', function(e) {

          var $button = $(this);
          var $button_container = $button.parent();
          var button_properties = read_button($button_container.attr('class').split(' '));      
          var selected = button_properties.selected;
          var button_segment = button_properties.segment;

          if (!selected) {

            $buttons.parent().removeClass('selected-0').removeClass('selected-1').removeClass('selected-2').removeClass('selected-3').removeClass('selected-4').removeClass('selected-5').removeClass('selected-6');
            $button_container.addClass('selected-' + button_segment);

            var sorting_type = determine_sort($controls.eq(1).find('a'));
            var sorting_kind = determine_kind($controls.eq(0).find('a'));

            if (sorting_kind == 'all') {
              var $filtered_data = $data.find('li');
            } else {
              var $filtered_data = $data.find('li.' + sorting_kind);
            }

            if (sorting_type == 'size') {
              var $sorted_data = $filtered_data.sorted({
                by: function(v) {
                  return parseFloat($(v).find('span.colore').text());
                }
              });
            } else {
              var $sorted_data = $filtered_data.sorted({
                by: function(v) {
                  return $(v).find('strong').text().toLowerCase();
                }
              });
            }

            $list.quicksand($sorted_data, $preferences);

          }

          e.preventDefault();
        });

      }); 

      var high_performance = true;  
      var $performance_container = $('#performance-toggle');
      var $original_html = $performance_container.html();

      $performance_container.find('a').live('click', function(e) {
        if (high_performance) {
          $preferences.useScaling = false;
          $performance_container.html('CSS3 scaling turned off. Try the demo again. <a href="#toggle">Reverse</a>.');
          high_performance = false;
        } else {
          $preferences.useScaling = true;
          $performance_container.html($original_html);
          high_performance = true;
        }
        e.preventDefault();
      });
    });
</script>

我还包含了用于灯箱效果的漂亮照片脚本。

问题是在我使用过滤器后,prettyphoto 脚本停止工作。我知道这是由 ajax 重新加载内容引起的。
我需要“重新加载”prettyphoto ,正如在 prettyphoto 官方论坛上所解释的那样

我试过:

function reloadPrettyPhoto() {
$(".pp_pic_holder").remove();   
$(".pp_overlay").remove();
$(".ppt").remove();
    $("a[rel^='prettyPhoto']").prettyPhoto();

}

我在第 112 行附近调用该函数,之后:

    $list.quicksand($sorted_data, $preferences);

      }
// Try to reload prettyphoto
reloadPrettyPhoto();
e.preventDefault();

    });

...自然没有结果:(

我也试过:

jQuery.ajaxStop(function(){
    $("a[rel^='prettyPhoto']").prettyPhoto();
    });

但什么都没有。

我无法理解如何在我的脚本上使用。

jQuery.ajaxStop(function(){
// Code to be run.
});

也是论坛用户推荐的

提前Tnx为您提供帮助!

4

3 回答 3

7

一旦流沙被执行,你确实需要重新初始化 prettyPhoto。

我为您提供了示例页面并修改了该行:

$list.quicksand($sorted_data, $preferences);

成为:

$list.quicksand($sorted_data, $preferences, function(){ $("a[rel^='prettyPhoto']").prettyPhoto(); });

这样,每次过滤内容时,都会刷新 prettyPhoto。

你可以在这里看到它的工作:http: //no-margin-for-errors.com/demos/quicksand/quicktest.html

谢谢

于 2011-04-13T23:21:58.057 回答
1

您是否尝试过在流沙回调中调用 prettyPhoto?

这是来自流沙网站的示例:

$('#source').quicksand( $('#destination li'), {
    name: value
}, function() {
    // callback code
});

我在流沙方面有过一些很好的经验,并在www.lovecreativity.co.uk上做其他事情——看看这对你有帮助吗?

祝你好运

于 2011-03-17T14:10:45.937 回答
0

正如 Scaron 所说,您应该尝试更换

$list.quicksand($sorted_data, $preferences);

$list.quicksand($sorted_data, $preferences, function(){ $("a[rel^='prettyPhoto']").prettyPhoto(); });

并在您的代码中检查您的 rel 属性是否为“prettyphoto”而不是“prettyPhoto”,大写字母 P,也许就是这样?

于 2012-12-26T18:36:36.137 回答