在 WordPress 上使用 Kenb (Ken Burns) Slider - 如何使幻灯片以随机顺序加载

Using Kenb (Ken Burns) Slider on WordPress - How to make slides load in random order

我在 WordPress 上使用 Kenb 效果滑块。我希望幻灯片以随机顺序加载。这可能吗?

我认为这是下面的相关js。您还可以在以下位置查看该站点:http://goo.gl/yBGZAk

(function($){

$.fn.kenburns = function(options) {

    var $canvas = $(this);
    var ctx = this[0].getContext('2d');
    var start_time = null;
    var width = $canvas.width();
    var height = $canvas.height();  

    var image_paths = options.images;       
    var display_time = options.display_time || 7000;
    var fade_time = Math.min(display_time / 2, options.fade_time || 1000);
    var solid_time = display_time - (fade_time * 2);
    var fade_ratio = fade_time - display_time
    var frames_per_second = options.frames_per_second || 30;        
    var frame_time = (1 / frames_per_second) * 1000;
    var zoom_level = 1 / (options.zoom || 2);
    var clear_color = options.background_color || '#000000';    

    var images = [];
    $(image_paths).each(function(i, image_path){
        images.push({path:image_path,
                     initialized:false,
                     loaded:false});
    });     
    function get_time() {
        var d = new Date();
        return d.getTime() - start_time;
    }

这是在主题的 function.php 文件中:

function kenres() {
        jQuery('#kenburns').kenburns({
            //Functionality

                images: [
                <?php   $tti = 0; while (have_posts()): the_post(); ?>
                    <?php if ($tti)
                        echo ',';
                    $tti++;
                    $full = wp_get_attachment_image_src(get_post_thumbnail_id(), 'full');
                    $title = get_post_meta(get_the_ID(), '_slide_title_value', true);
                    echo "'";
                    echo $full[0];
                    echo "'" ?>                  
                     <?php endwhile ?>
                     <?php wp_reset_query(); ?>

当您初始化滑块时,您会传递一个图像数组(称为 images)作为选项,因此如果您随机化该列表,您将有不同的顺序。

您可以通过 PHP(当您输出脚本代码并传递图像数组时)使用 shuffle():

$images = array('image1.jpg', 'image2.jpg', 'image3.jpg');
shuffle( $images );

或者,如果您想在 Javascript 代码中执行此操作,您可以使用此方法:

['image1.jpg', 'image2.jpg', 'image3.jpg'].sort(function() { return 0.5 - Math.random() });

参见以下示例:

var random = [
  
  'image1.jpg',
  'image2.jpg',
  'image3.jpg',
  'image4.jpg',
  'image5.jpg',

].sort(function() { return 0.5 - Math.random() });


document.getElementById('output').innerHTML = random;
<div id="output"></div>

更新

看到更新问题中的新代码,您可以将 PHP 部分(images = [ 之后的所有内容)替换为:

<?php
$images = array();
while (have_posts()): the_post();
    $full = wp_get_attachment_image_src(get_post_thumbnail_id(), 'full');
    $title = get_post_meta(get_the_ID(), '_slide_title_value', true);
    $images []= "'{$full[0]}'";
endwhile;
wp_reset_query();

shuffle($images);
echo implode(',', $images);
?>

基本上,这段代码不是每次迭代都回显图像路径,而是将路径添加到 $images 数组,然后在回显之前将其打乱。