Галерея Fancybox без HREF? - PullRequest
       4

Галерея Fancybox без HREF?

6 голосов
/ 11 февраля 2012

Я хочу сделать fancybox галерею с img без использования ссылок (href)?Как я могу это сделать?

HTML:

<div id="foo2">
        <img src="/images/banners/001.jpg" rel="downslider" alt="" width="80" height="80" />
        <img src="/images/banners/002.jpg" rel="downslider" alt="" width="80" height="80" />
        <img src="/images/banners/003.jpg" rel="downslider" alt="" width="80" height="80" />
        <img src="/images/banners/004.jpg" rel="downslider" alt="" width="80" height="80" />
        <img src="/images/banners/005.jpg" rel="downslider" alt="" width="80" height="80" />
        <img src="/images/banners/006.jpg" rel="downslider" alt="" width="80" height="80" />
        <img src="/images/banners/007.jpg" rel="downslider" alt="" width="80" height="80" />
        <img src="/images/banners/008.jpg" rel="downslider" alt="" width="80" height="80" />
.....
</div>

JS (теперь он работает с отдельными изображениями, без эффекта галереи):

$("#foo2 img").click(function(e) {
        var url = $(this).attr('src');
        var rel = $(this).attr('rel');
        var content = '<img src="' + url + '" rel="'+ rel + '" />';
        $.fancybox({
            'transitionIn'  :   'elastic',
            'transitionOut' :   'elastic',
            'speedIn'       :   600, 
            'speedOut'      :   200, 
            'overlayShow'   :   false,
            'content' : content
        });
    });

Ответы [ 5 ]

10 голосов
/ 12 февраля 2012

Вы не можете создать галерею с помощью ручного метода .click(), если не установите все элементы галереи внутри самого сценария fancybox, например:

$("#foo2 img").click(function(e) {
 $.fancybox([
  'images/01.jpg',
  'images/02.jpg', // etc
  ],{
   // fancybox options 
   'type': 'image' // etc.
 }); // fancybox
}); // click 

Однако, чтобы заставить его работать так, как вы хотите, и моделировать обычную галерею fancybox без использования ссылок (теги <a> с атрибутами href), вам необходимо создать собственную функцию с собственными пользовательскими методами навигации.

Не меняя HTML, попробуйте JS:

<script type="text/javascript">
function fancyBoxMe(index){
 var gallerySize = $("#foo2 img").size();
 if((index+1) == gallerySize){ nexT = 0 } else { nexT = index+1}
 if(index == 0){ preV = (gallerySize-1) } else { preV = index-1}
 var tarGet = $('#foo2 img').eq(index).attr('src');
 $.fancybox({
  'transitionIn' : 'elastic',
  'transitionOut' : 'elastic',
  'speedIn' : 600, 
  'speedOut' : 200, 
  'overlayShow' : false,
  'href': tarGet,
  'titlePosition': 'inside',
  'titleFormat' : function(){
    return 'Image '+(index+1)+' of '+gallerySize+'<a id="preV" href="javascript:;" onclick="fancyBoxMe('+preV+')">prev</a> <a id="nexT" href="javascript:;" onclick="fancyBoxMe('+nexT+')">next</a>';
  }
 }); // fancybox
} // fancyBoxMe
$(document).ready(function() {
 $("#foo2 img").each(function(i){
  $(this).bind('click', function(){
   fancyBoxMe(i);
  }); //bind        
 }); //each
}); // ready
</script>

Это создает галерею fancybox из тегов <img> с приятным эффектом зацикливания. Кроме того, с небольшим значением CSS мы можем иметь элементы управления навигацией, используя значки стрелок fancybox. См. Рабочий пример здесь .

Поскольку управление навигацией полностью ручное, на самом деле вам не нужен атрибут rel в теге <img>.

Обратите внимание , что приведенный выше код предназначен для Fancybox v1.3.x (я предполагал, что вы используете v1.3.x, потому что параметры API).

9 голосов
/ 07 июня 2012

Это сработало для меня:

$(".CLASSNAME").each(function(){

   $(this).fancybox({

       href : $(this).attr('src')

   });


});
2 голосов
/ 23 декабря 2015

простым способом, вы можете добавить якорь / тег в каждое изображение из id = 'foo2'.

$('#foo2 img').each(function (){
 var currentImage = $(this); 
 currentImage.wrap("<a class='fancybox' href='" + currentImage.attr("src") + "'</a>"); });

А затем:

$(".fancybox").fancybox({
    openEffect  : 'none',
    closeEffect : 'none',
    beforeShow : function() {
    this.title =  'Image ' + (this.index + 1) + ' of ' + this.group.length + ' '+(this.title ? '' + this.title + '' : '');
   },
   helpers  : {
        thumbs  : {
            width   : 50,
            height  : 50
        }
    }
});
2 голосов
/ 18 сентября 2014
$(document).ready(function(){

    $(".fancy").each(function () {
        $(this).replaceWith('<a class="fancybox" href="'+$(this).attr('src')+'">'+$(this)[0].outerHTML +'</a>');
    }).promise().done(function(){ $('.fancybox').fancybox(); });

});

затем:

<img class="fancy" src="1.jpg" alt="" />
<img class="fancy" src="2.jpg" alt="" />

и затем с дальнейшей настройкой

<img class="fancy" src="2.jpg" data-small-image="small2.jpg" alt="" />
0 голосов
/ 11 февраля 2012

Вам необходимо выполнить вызов fancybox для изображений:

$('#foo2 img').fancybox({
  'transitionIn'  :   'elastic',
  'transitionOut' :   'elastic',
  'speedIn'       :   600, 
  'speedOut'      :   200, 
  'overlayShow'   :   false
});

должно работать, но я его не проверял ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...