1

Responsive Lightboxと呼ばれるプラグインを使用しており、その中で Swipbox Layout を使用しています。正常に動作しますが、キャプションが希望どおりに表示されません。表示するには、画像のリンクにtitle 属性を含める必要があります。サイトのブロガーはコードにあまり詳しくなく、実際の記事に表示される画像ギャラリーのキャプションを既に導入しているため、これはサイトのブロガーにとってすぐにできることではありません。ここで例を見ることができます:

http://bicireview.com/2013/11/08/chaqueta-de-ciclismo-imtransmite-como-elegir/

最初の画像をクリックすると、キャプションとしてPruebaが表示されます(スペイン語でテストを意味します)。ただし、実際のキャプションは、Imtransmite de ciclismo dhb – Hi Vizにする必要があります。

他の画像に移動すると、title 属性が導入されていないので、ご覧のとおり、キャプションはありません。

ここで jquery オープン ソース コードを見つけたので、以下で共有します。私がすでに持っているものからキャプションを取得するようにコードを変更する方法があるかどうか知っていますか?

事前にどうもありがとうございました

  /*-------------

 @author       Constantin Saguin - @brutaldesign
 @link            http://csag.co
 @github        http://github.com/brutaldesign/swipebox
 @version     1.2.1
 @license      MIT License

  -------------*/

;(function (window, document, $, undefined) {

$.swipebox = function(elem, options) {

    var defaults = {
        useCSS : true,
        initialIndexOnArray : 0,
        hideBarsDelay : 3000,
        videoMaxWidth : 1140,
        vimeoColor : 'CCCCCC',
        beforeOpen: null,
            afterClose: null
    },

    plugin = this,
    elements = [], // slides array [{href:'...', title:'...'}, ...],
    elem = elem,
    selector = elem.selector,
    $selector = $(selector),
    isTouch = document.createTouch !== undefined || ('ontouchstart' in window) || ('onmsgesturechange' in window) || navigator.msMaxTouchPoints,
    supportSVG = !!(window.SVGSVGElement),
    winWidth = window.innerWidth ? window.innerWidth : $(window).width(),
    winHeight = window.innerHeight ? window.innerHeight : $(window).height(),
    html = '<div id="swipebox-overlay">\
            <div id="swipebox-slider"></div>\
            <div id="swipebox-caption"></div>\
            <div id="swipebox-action">\
                <a id="swipebox-close"></a>\
                <a id="swipebox-prev"></a>\
                <a id="swipebox-next"></a>\
            </div>\
    </div>';

    plugin.settings = {}

    plugin.init = function(){

        plugin.settings = $.extend({}, defaults, options);

        if ($.isArray(elem)) {

            elements = elem;
            ui.target = $(window);
            ui.init(plugin.settings.initialIndexOnArray);

        }else{

            $selector.click(function(e){
                elements = [];
                var index , relType, relVal;

                if (!relVal) {
                    relType = 'rel';
                    relVal  = $(this).attr(relType);
                }

                if (relVal && relVal !== '' && relVal !== 'nofollow') {
                    $elem = $selector.filter('[' + relType + '="' + relVal + '"]');
                }else{
                    $elem = $(selector);
                }

                $elem.each(function(){

                    var title = null, href = null;

                    if( $(this).attr('title') )
                        title = $(this).attr('title');

                    if( $(this).attr('href') )
                        href = $(this).attr('href');

                    elements.push({
                        href: href,
                        title: title
                    });
                });

                index = $elem.index($(this));
                e.preventDefault();
                e.stopPropagation();
                ui.target = $(e.target);
                ui.init(index);
            });
        }
    }

    plugin.refresh = function() {
        if (!$.isArray(elem)) {
            ui.destroy();
            $elem = $(selector);
            ui.actions();
        }
    }

    var ui = {

        init : function(index){
            if (plugin.settings.beforeOpen) 
                plugin.settings.beforeOpen();
            this.target.trigger('swipebox-start');
            $.swipebox.isOpen = true;
            this.build();
            this.openSlide(index);
            this.openMedia(index);
            this.preloadMedia(index+1);
            this.preloadMedia(index-1);
        },

        build : function(){
            var $this = this;

            $('body').append(html);

            if($this.doCssTrans()){
                $('#swipebox-slider').css({
                    '-webkit-transition' : 'left 0.4s ease',
                    '-moz-transition' : 'left 0.4s ease',
                    '-o-transition' : 'left 0.4s ease',
                    '-khtml-transition' : 'left 0.4s ease',
                    'transition' : 'left 0.4s ease'
                });
                $('#swipebox-overlay').css({
                    '-webkit-transition' : 'opacity 1s ease',
                    '-moz-transition' : 'opacity 1s ease',
                    '-o-transition' : 'opacity 1s ease',
                    '-khtml-transition' : 'opacity 1s ease',
                    'transition' : 'opacity 1s ease'
                });
                $('#swipebox-action, #swipebox-caption').css({
                    '-webkit-transition' : '0.5s',
                    '-moz-transition' : '0.5s',
                    '-o-transition' : '0.5s',
                    '-khtml-transition' : '0.5s',
                    'transition' : '0.5s'
                });
            }


            if(supportSVG){
                var bg = $('#swipebox-action #swipebox-close').css('background-image');
                bg = bg.replace('png', 'svg');
                $('#swipebox-action #swipebox-prev,#swipebox-action #swipebox-next,#swipebox-action #swipebox-close').css({
                    'background-image' : bg
                });
            }

            $.each( elements,  function(){
                $('#swipebox-slider').append('<div class="slide"></div>');
            });

            $this.setDim();
            $this.actions();
            $this.keyboard();
            $this.gesture();
            $this.animBars();
            $this.resize();

        },

        setDim : function(){

            var width, height, sliderCss = {};

            if( "onorientationchange" in window ){

                window.addEventListener("orientationchange", function() {
                    if( window.orientation == 0 ){
                        width = winWidth;
                        height = winHeight;
                    }else if( window.orientation == 90 || window.orientation == -90 ){
                        width = winHeight;
                        height = winWidth;
                    }
                }, false);


            }else{

                width = window.innerWidth ? window.innerWidth : $(window).width();
                height = window.innerHeight ? window.innerHeight : $(window).height();
            }

            sliderCss = {
                width : width,
                height : height
            }


            $('#swipebox-overlay').css(sliderCss);

        },

        resize : function (){
            var $this = this;

            $(window).resize(function() {
                $this.setDim();
            }).resize();
        },

        supportTransition : function() {
            var prefixes = 'transition WebkitTransition MozTransition OTransition msTransition KhtmlTransition'.split(' ');
            for(var i = 0; i < prefixes.length; i++) {
                if(document.createElement('div').style[prefixes[i]] !== undefined) {
                    return prefixes[i];
                }
            }
            return false;
        },

        doCssTrans : function(){
            if(plugin.settings.useCSS && this.supportTransition() ){
                return true;
            }
        },

        gesture : function(){
            if ( isTouch ){
                var $this = this,
                distance = null,
                swipMinDistance = 10,
                startCoords = {},
                endCoords = {};
                var bars = $('#swipebox-caption, #swipebox-action');

                bars.addClass('visible-bars');
                $this.setTimeout();

                $('body').bind('touchstart', function(e){

                    $(this).addClass('touching');

                    endCoords = e.originalEvent.targetTouches[0];
                        startCoords.pageX = e.originalEvent.targetTouches[0].pageX;

                    $('.touching').bind('touchmove',function(e){
                        e.preventDefault();
                        e.stopPropagation();
                            endCoords = e.originalEvent.targetTouches[0];

                    });

                            return false;

                    }).bind('touchend',function(e){
                        e.preventDefault();
                e.stopPropagation();

                distance = endCoords.pageX - startCoords.pageX;

                    if( distance >= swipMinDistance ){

                        // swipeLeft
                        $this.getPrev();

                    }else if( distance <= - swipMinDistance ){

                        // swipeRight
                        $this.getNext();

                    }else{
                        // tap
                        if(!bars.hasClass('visible-bars')){
                        $this.showBars();
                        $this.setTimeout();
                    }else{
                        $this.clearTimeout();
                        $this.hideBars();
                    }

                    }   

                    $('.touching').off('touchmove').removeClass('touching');

                });

                    }
        },

        setTimeout: function(){
            if(plugin.settings.hideBarsDelay > 0){
                var $this = this;
                $this.clearTimeout();
                $this.timeout = window.setTimeout( function(){
                    $this.hideBars() },
                    plugin.settings.hideBarsDelay
                );
            }
        },

        clearTimeout: function(){   
            window.clearTimeout(this.timeout);
            this.timeout = null;
        },

        showBars : function(){
            var bars = $('#swipebox-caption, #swipebox-action');
            if(this.doCssTrans()){
                bars.addClass('visible-bars');
            }else{
                $('#swipebox-caption').animate({ top : 0 }, 500);
                $('#swipebox-action').animate({ bottom : 0 }, 500);
                setTimeout(function(){
                    bars.addClass('visible-bars');
                }, 1000);
            }
        },

        hideBars : function(){
            var bars = $('#swipebox-caption, #swipebox-action');
            if(this.doCssTrans()){
                bars.removeClass('visible-bars');
            }else{
                $('#swipebox-caption').animate({ top : '-50px' }, 500);
                $('#swipebox-action').animate({ bottom : '-50px' }, 500);
                setTimeout(function(){
                    bars.removeClass('visible-bars');
                }, 1000);
            }
        },

        animBars : function(){
            var $this = this;
            var bars = $('#swipebox-caption, #swipebox-action');

            bars.addClass('visible-bars');
            $this.setTimeout();

            $('#swipebox-slider').click(function(e){
                if(!bars.hasClass('visible-bars')){
                    $this.showBars();
                    $this.setTimeout();
                }
            });

            $('#swipebox-action').hover(function() {
                    $this.showBars();
                    bars.addClass('force-visible-bars');
                    $this.clearTimeout();

                },function() { 
                    bars.removeClass('force-visible-bars');
                    $this.setTimeout();

            });
        },

        keyboard : function(){
            var $this = this;
            $(window).bind('keyup', function(e){
                e.preventDefault();
                e.stopPropagation();
                if (e.keyCode == 37){
                    $this.getPrev();
                }
                else if (e.keyCode==39){
                    $this.getNext();
                }
                else if (e.keyCode == 27) {
                    $this.closeSlide();
                }
            });
        },

        actions : function(){
            var $this = this;

            if( elements.length < 2 ){
                $('#swipebox-prev, #swipebox-next').hide();
            }else{
                $('#swipebox-prev').bind('click touchend', function(e){
                    e.preventDefault();
                    e.stopPropagation();
                    $this.getPrev();
                    $this.setTimeout();
                });

                $('#swipebox-next').bind('click touchend', function(e){
                    e.preventDefault();
                    e.stopPropagation();
                    $this.getNext();
                    $this.setTimeout();
                });
            }

            $('#swipebox-close').bind('click touchend', function(e){
                $this.closeSlide();
            });
        },

        setSlide : function (index, isFirst){
            isFirst = isFirst || false;

            var slider = $('#swipebox-slider');

            if(this.doCssTrans()){
                slider.css({ left : (-index*100)+'%' });
            }else{
                slider.animate({ left : (-index*100)+'%' });
            }

            $('#swipebox-slider .slide').removeClass('current');
            $('#swipebox-slider .slide').eq(index).addClass('current');
            this.setTitle(index);

            if( isFirst ){
                slider.fadeIn();
            }

            $('#swipebox-prev, #swipebox-next').removeClass('disabled');
            if(index == 0){
                $('#swipebox-prev').addClass('disabled');
            }else if( index == elements.length - 1 ){
                $('#swipebox-next').addClass('disabled');
            }
        },

        openSlide : function (index){
            $('html').addClass('swipebox');
            $(window).trigger('resize'); // fix scroll bar visibility on desktop
            this.setSlide(index, true);
        },

        preloadMedia : function (index){
            var $this = this, src = null;

            if( elements[index] !== undefined )
                src = elements[index].href;

            if( !$this.isVideo(src) ){
                setTimeout(function(){
                    $this.openMedia(index);
                }, 1000);
            }else{
                $this.openMedia(index);
            }
        },

        openMedia : function (index){
            var $this = this, src = null;

            if( elements[index] !== undefined )
                src = elements[index].href;

            if(index < 0 || index >= elements.length){
                return false;
            }

            if( !$this.isVideo(src) ){
                $this.loadMedia(src, function(){
                    $('#swipebox-slider .slide').eq(index).html(this);
                });
            }else{
                $('#swipebox-slider .slide').eq(index).html($this.getVideo(src));
            }

        },

        setTitle : function (index, isFirst){
            var title = null;

            $('#swipebox-caption').empty();

            if( elements[index] !== undefined )
                title = elements[index].title;

            if(title){
                $('#swipebox-caption').append(title);
            }
        },

        isVideo : function (src){

            if( src ){
                if( 
                    src.match(/youtube\.com\/watch\?v=([a-zA-Z0-9\-_]+)/) 
                    || src.match(/vimeo\.com\/([0-9]*)/) 
                ){
                    return true;
                }
            }

        },

        getVideo : function(url){
            var iframe = '';
            var output = '';
            var youtubeUrl = url.match(/watch\?v=([a-zA-Z0-9\-_]+)/);
            var vimeoUrl = url.match(/vimeo\.com\/([0-9]*)/);
            if( youtubeUrl ){

                iframe = '<iframe width="560" height="315" src="//www.youtube.com/embed/'+youtubeUrl[1]+'" frameborder="0" allowfullscreen></iframe>';

            }else if(vimeoUrl){

                iframe = '<iframe width="560" height="315"  src="http://player.vimeo.com/video/'+vimeoUrl[1]+'?byline=0&amp;portrait=0&amp;color='+plugin.settings.vimeoColor+'" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>';

            }

            return '<div class="swipebox-video-container" style="max-width:'+plugin.settings.videomaxWidth+'px"><div class="swipebox-video">'+iframe+'</div></div>';
        },

        loadMedia : function (src, callback){
            if( !this.isVideo(src) ){
                var img = $('<img>').on('load', function(){
                    callback.call(img);
                });

                img.attr('src',src);
            }   
        },

        getNext : function (){
            var $this = this;
            index = $('#swipebox-slider .slide').index($('#swipebox-slider .slide.current'));
            if(index+1 < elements.length){
                index++;
                $this.setSlide(index);
                $this.preloadMedia(index+1);
            }
            else{

                $('#swipebox-slider').addClass('rightSpring');
                setTimeout(function(){
                    $('#swipebox-slider').removeClass('rightSpring');
                },500);
            }
        },

        getPrev : function (){
            index = $('#swipebox-slider .slide').index($('#swipebox-slider .slide.current'));
            if(index > 0){
                index--;
                this.setSlide(index);
                this.preloadMedia(index-1);
            }
            else{

                $('#swipebox-slider').addClass('leftSpring');
                setTimeout(function(){
                    $('#swipebox-slider').removeClass('leftSpring');
                },500);
            }
        },


        closeSlide : function (){
            $('html').removeClass('swipebox');
            $(window).trigger('resize');
            this.destroy();
        },

        destroy : function(){
            $(window).unbind('keyup');
            $('body').unbind('touchstart');
            $('body').unbind('touchmove');
            $('body').unbind('touchend');
            $('#swipebox-slider').unbind();
            $('#swipebox-overlay').remove();
            if (!$.isArray(elem))
                elem.removeData('_swipebox');
            if ( this.target )
                this.target.trigger('swipebox-destroy');
            $.swipebox.isOpen = false;
            if (plugin.settings.afterClose) 
                plugin.settings.afterClose();
        }

    };

    plugin.init();

};

$.fn.swipebox = function(options){
    if (!$.data(this, "_swipebox")) {
        var swipebox = new $.swipebox(this, options);
        this.data('_swipebox', swipebox);
    }
    return this.data('_swipebox');
}
    }(window, document, jQuery));
4

2 に答える 2

2

Swipebox v1.2.9 の 99 行目を変更できます

以前のバージョンでは中括弧はありませんが

if ( $( this ).attr( 'title' ) ) {
  title = $( this ).attr( 'title' );
}

為に:

if ( $( this ).attr( 'alt' ) ) {
  title = $( this ).attr( 'alt' );
}

私の場合、a 要素の横に別の非表示の div を使用しました。

if ( $( this ).next( '.title' ).html() ) {
  title = $( this ).next( '.title' ).html();
}

HTML は次のようになります。

<a href = "image.jpg" class = "swipebox-img">Open lightbox</a>
<div class="title" style="display: none;"><p>The new title</p></div>
于 2014-05-01T20:02:09.490 に答える