【问题标题】:jQuery slider redirect the imagejQuery滑块重定向图像
【发布时间】:2012-04-19 12:37:42
【问题描述】:

我使用jQuery Blinds Slideshow 作为图像滑块。当我点击它时,我想将第一个滑动图像重定向到http://google.com。我使用a这样的html标签:

<div class="slideshow">
   <ul>
      <li><a href="http://google.com"><img src="lemons/1.jpg" alt="lemon" /></a></li>
      <li><img src="lemons/2.jpg" alt="lemon tea" /></li>
   </ul>
</div>

<a href="#" onclick="$('.slideshow').blinds_change(0)">1</a>
<a href="#" onclick="$('.slideshow').blinds_change(1)">2</a>

但它不起作用。
我的问题是当我点击它时如何将第一个滑动图像重定向到 google.com?
提前致谢。

【问题讨论】:

    标签: javascript jquery jquery-plugins slider slideshow


    【解决方案1】:

    这是我修改原始 jquery-blinds 的快速而肮脏的东西。 将它放在一个新的 JS 文件中,并将其命名为 jquery.blinds-0.9-with-hyperlinks.js 或其他名称,并将其包含在当前 jquery-blinds 代码的位置。

    它应该适用于您在上面发布的 HTML。它只是检查是否有任何图像包含在 '' 标记中,如果是,则使图像在点击时重定向到该链接。

    /*!
     * jQuery Blinds
     * http://www.littlewebthings.com/projects/blinds
     *
     * Copyright 2010, Vassilis Dourdounis
     * 
     * Permission is hereby granted, free of charge, to any person obtaining a copy
     * of this software and associated documentation files (the "Software"), to deal
     * in the Software without restriction, including without limitation the rights
     * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
     * copies of the Software, and to permit persons to whom the Software is
     * furnished to do so, subject to the following conditions:
     * 
     * The above copyright notice and this permission notice shall be included in
     * all copies or substantial portions of the Software.
     * 
     * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
     * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
     * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
     * THE SOFTWARE.
     *
     * Modified by Thomas Antony ( http://www.thomasantony.net ) on 06-Apr-2012
     * Added image hyperlinking functionality
     *
     */
    (function($){
    
        $.fn.blinds = function (options) {
    
            $(this).find('li').hide();
            $(this).addClass('blinds_slideshow');
    
            settings = {};
            settings.tile_orchestration = this.tile_orchestration;
    
            settings.h_res = 12;
            settings.v_res = 1;
    
            settings.width = $(this).find('li:first').width();
            settings.height = $(this).find('li:first').height();
    
            jQuery.extend(settings, options);
    
            tiles_width = settings.width / settings.h_res;
            tiles_height = settings.height / settings.v_res;
    
            // Get image list
            blinds_images = [];
            blinds_links = [];
    
            $(this).find('img').each(function (i, e) {
                blinds_images[blinds_images.length] = {'title': e.alt, 'src': e.src}
                // Code added to allow for linking functionality -- Thomas
                if( $(e).parent().is('a') && $(e).parent().attr('href') != undefined)
                {
                    blinds_links[i] = $(e).parent().attr('href');
                }else{
                    blinds_links[i] = "";
                }
            });
    
            // Create blinds_container
            $(this).append('<div class="blinds_container"></div>');
    
            blinds_container = $(this).find('.blinds_container');
            blinds_container.css({
                'position'  : 'relative', 
                'display'   : 'block', 
                'width'     : settings.width, 
                'height'    : settings.height, 
    //          'border'    : '1px solid red', // debuging
                'background': 'transparent url("' + blinds_images[1]['src'] + '") 0px 0px no-repeat'
            } );
    
    
            // Setup tiles
            for (i = 0; i < settings.h_res; i++)
            {
                for (j = 0; j < settings.v_res; j++)
                {
                    if (tile = $(this).find('.tile_' + i + '_' + j))
                    {
                        h = '<div class="outer_tile_' + i + '_' + j + '"><div class="tile_' + i + '_' + j + '"></div></div>';
                        blinds_container.append(h);
                        outer_tile = $(this).find('.outer_tile_' + i + '_' + j);
                        outer_tile.css({
                            'position'  : 'absolute',
                            'width'     : tiles_width,
                            'height'    : tiles_height,
                            'left'      : i * tiles_width,
                            'top'       : j * tiles_height
                        })
    
                        tile = $(this).find('.tile_' + i + '_' + j);
                        tile.css({
                            'position'  : 'absolute',
                            'width'     : tiles_width,
                            'height'    : tiles_height,
                            'left'      : 0,
                            'top'       : 0,
    //                      'border'    : '1px solid red', // debuging
                            'background': 'transparent url("' + blinds_images[0]['src'] + '") -' + (i * tiles_width) + 'px -' + (j * tiles_height) + 'px no-repeat' 
                        })
    
                        jQuery.data($(tile)[0], 'blinds_position', {'i': i, 'j': j});
                    }
                }
            }
    
            jQuery.data(this[0], 'blinds_config', {
                'h_res': settings.h_res,
                'v_res': settings.v_res,
                'tiles_width': tiles_width,
                'tiles_height': tiles_height,
                'images': blinds_images,
                'img_index': 0,
                'change_buffer': 0,
                'tile_orchestration': settings.tile_orchestration
            });
    
    
            // Add redirection code for the links -- Thomas 
            var container = this[0];    // Need this to get config data within click handler
            jQuery.data(this[0], 'blinds_links', blinds_links);
    
            blinds_container.click(function(){
                var config = jQuery.data(container, 'blinds_config');
                if(blinds_links[config.img_index] != "")
                {
                    window.location.href = blinds_links[config.img_index]
                }
            }); 
            $(this).update_cursor(); // Set correct cursor for first image -- Thomas
            // Modified code ends
    
        }
    
        $.fn.blinds_change = function (img_index) {
    
            // reset all sprites
            config = jQuery.data($(this)[0], 'blinds_config');
            for (i = 0; i < config.h_res; i++)
            {
                for (j = 0; j < config.v_res; j++) {
                    $(this).find('.tile_' + i + '_' + j).show().css('background', 'transparent ' + 'url("' + config.images[config.img_index]['src'] + '") -' + (i * config.tiles_width) + 'px -' + (j * config.tiles_height) + 'px no-repeat');
                }
            }
    
            $(this).children('.blinds_container').css('background', 'transparent url("' + blinds_images[img_index]['src'] + '") 0px 0px no-repeat' );
    
            config.img_index = img_index;
            jQuery.data($(this)[0], 'blinds_config', config);
    
            for (i = 0; i < config.h_res; i++)
            {
                for (j = 0; j < config.v_res; j++) {
                    t = config.tile_orchestration(i, j, config.h_res, config.v_res);
    
                    config = jQuery.data($(this)[0], 'blinds_config');
                    config.change_buffer = config.change_buffer + 1;
                    jQuery.data(this[0], 'blinds_config', config);
    
                    $(this).find('.tile_' + i + '_' + j).fadeOut(t, function() {
                        blinds_pos = jQuery.data($(this)[0], 'blinds_position');
                        config = jQuery.data($(this).parents('.blinds_slideshow')[0], 'blinds_config');
    
                        $(this).css('background', 'transparent ' + 'url("' + config.images[config.img_index]['src'] + '") -' + (blinds_pos.i * config.tiles_width) + 'px -' + (blinds_pos.j * config.tiles_height) + 'px no-repeat');
    
                        config.change_buffer = config.change_buffer - 1;
                        jQuery.data($(this).parents('.blinds_slideshow')[0], 'blinds_config', config);
    
                        if (config.change_buffer == 0) {
    //                      $(this).parent().parent().children().children().css('width', config.tiles_width);
                            $(this).parent().parent().children().children().show();
                        }
    
                    });
                }
            }
            $(this).update_cursor();
        }
    
        $.fn.tile_orchestration = function (i, j, total_x, total_y) {
            return (Math.abs(i-total_x/2)+Math.abs(j-total_y/2))*100;
        }
    
        // Function to update cursor to a "hand" if image is linked -- Thomas
        $.fn.update_cursor = function()
        {
            // Change cursor if image is hyperlinked
            var config = jQuery.data($(this)[0], 'blinds_config');
            var blinds_links = jQuery.data($(this)[0], 'blinds_links'); // get links from saved data
    
            console.log(config.img_index);
            if(blinds_links[config.img_index] != "")
            {
                $(this).find('.blinds_container').css('cursor','pointer');
            }else{
                $(this).find('.blinds_container').css('cursor','auto');
            }
        }
    
    })(jQuery);
    

    【讨论】:

      【解决方案2】:
      <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
      <script type="text/javascript">
      $(document).ready(function(){
          $('a:first').click(function(){
              window.location.href = 'http://google.com/';
          });
      });
      </script>
      

      或者

      <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
      <script type="text/javascript">
      $(document).ready(function(){
          $('div.slideshow img:first').click(function(){
              window.location.href = 'http://google.com/';
          });
      });
      

      【讨论】:

      • 抱歉,这些不适用于此插件。当我为不在滑块中的图像尝试您的代码时,它确实有效,但是当我为滑块中的图像尝试此代码时,它不起作用:(您可以下载这个插件并尝试一下吗?
      • 你没有包含启用滑块的 js 函数 $(window).load(function () { // 开始幻灯片 $('.slideshow').blinds(); })
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-08
      • 1970-01-01
      • 2020-10-03
      • 2014-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多