Запуск функции jQuery по клику с несколькими изображениями в fotorama

Я использую скрипт fotorama для галереи изображений. Мне потребовалось немного времени, чтобы понять правильный синтаксис модификации скрипта, чтобы вращающееся изображение было кликабельным. (см. JS в коде ниже). Я хочу, чтобы каждое вращающееся изображение щелкало по другому URL-адресу. Например, в приведенном ниже коде изображение "/03.jpg" может указывать на "google.com", ссылка "/04.jpg" может указывать на "yahoo.com", а изображение "/05.jpg" может указывать на на "bing.com".

<div id="fotorama">
    <a href="http://fotoramajs.com/;-)/03.jpg">
        <img src="http://fotoramajs.com/;-)/th/03.jpg" alt="Masha">
    </a>
    <a href="http://fotoramajs.com/;-)/04.jpg">
        <img src="http://fotoramajs.com/;-)/th/04.jpg" alt="Sasha">
    </a>
    <a href="http://fotoramajs.com/;-)/05.jpg">
        <img src="http://fotoramajs.com/;-)/th/05.jpg" alt="Klava">
    </a>
    <a href="http://fotoramajs.com/;-)/06.jpg">
        <img src="http://fotoramajs.com/;-)/th/06.jpg" alt="Dunya">
    </a>
    <a href="http://fotoramajs.com/;-)/07.jpg">
        <img src="http://fotoramajs.com/;-)/th/07.jpg" alt="Svetlana Nikolaevna">
    </a>
    <a href="http://fotoramajs.com/;-)/08.jpg">
        <img src="http://fotoramajs.com/;-)/th/08.jpg" alt="Zhenechka">
    </a>
    <a href="http://fotoramajs.com/;-)/01.jpg">
        <img src="http://fotoramajs.com/;-)/th/01.jpg" alt="Potapova Yulya">
    </a>
    <a href="http://fotoramajs.com/;-)/09.jpg">
        <img src="http://fotoramajs.com/;-)/th/09.jpg" alt="Asel">
    </a>
    <a href="http://fotoramajs.com/;-)/10.jpg">
        <img src="http://fotoramajs.com/;-)/th/10.jpg" alt="Ekaterina">
    </a>
    <a href="http://fotoramajs.com/;-)/11.jpg">
        <img src="http://fotoramajs.com/;-)/th/11.jpg" alt="Varya">
    </a>
    <a href="http://fotoramajs.com/;-)/12.jpg">
        <img src="http://fotoramajs.com/;-)/th/12.jpg" alt="Marina Petrova">
    </a>
    <a href="http://fotoramajs.com/;-)/13.jpg">
        <img src="http://fotoramajs.com/;-)/th/13.jpg" alt="Frosya">
    </a>
    <a href="http://fotoramajs.com/;-)/14.jpg">
        <img src="http://fotoramajs.com/;-)/th/14.jpg" alt="Sonechka">
    </a>
    <a href="http://fotoramajs.com/;-)/15.jpg">
        <img src="http://fotoramajs.com/;-)/th/15.jpg" alt="Galina">
    </a>
    <a href="http://fotoramajs.com/;-)/16.jpg">
        <img src="http://fotoramajs.com/;-)/th/16.jpg" alt="Tatiana">
    </a>
    <a href="http://fotoramajs.com/;-)/17.jpg">
        <img src="http://fotoramajs.com/;-)/th/17.jpg" alt="Artemida">
    </a>
    <a href="http://fotoramajs.com/;-)/18.jpg">
        <img src="http://fotoramajs.com/;-)/th/18.jpg" alt="Sofia">
    </a>
    <a href="http://fotoramajs.com/;-)/19.jpg">
        <img src="http://fotoramajs.com/;-)/th/19.jpg" alt="Nina">
    </a>
    <a href="http://fotoramajs.com/;-)/20.jpg">
        <img src="http://fotoramajs.com/;-)/th/20.jpg" alt="Valentina">
    </a>
    <a href="http://fotoramajs.com/;-)/21.jpg">
        <img src="http://fotoramajs.com/;-)/th/21.jpg" alt="Kristina">
    </a>
    <a href="http://fotoramajs.com/;-)/02.jpg">
        <img src="http://fotoramajs.com/;-)/th/02.jpg" alt="Browny">
    </a>
    <a href="http://fotoramajs.com/;-)/22.jpg">
        <img src="http://fotoramajs.com/;-)/th/22.jpg" alt="Gulchitai">
    </a>
    <a href="http://fotoramajs.com/;-)/23.jpg">
        <img src="http://fotoramajs.com/;-)/th/23.jpg" alt="Elena">
    </a>
    <a href="http://fotoramajs.com/;-)/24.jpg">
        <img src="http://fotoramajs.com/;-)/th/24.jpg" alt="Olga">
    </a>
    <a href="http://fotoramajs.com/;-)/25.jpg">
        <img src="http://fotoramajs.com/;-)/th/25.jpg" alt="Tonya">
    </a>
    <a href="http://fotoramajs.com/;-)/26.jpg">
        <img src="http://fotoramajs.com/;-)/th/26.jpg" alt="Feodora">
    </a>
</div>






// Change ↓values↓, press ↑Run↑, see →Result→
$('#fotorama').fotorama({
    width: '100%',
    height: 'auto',
    aspectRatio: 1.4989293362, // =700/467

    minWidth: null,
    maxWidth: null,
    minHeight: null,
    maxHeight: null,

    transition: 'slide', // or 'fade'
    click: true,
    loop: false, // or true

    autoplay: false,
    stopAutoplayOnAction: true,

    transitionDuration: 333,

    background: null,
    // 'black', '#b10000', or url(bg.png)
    margin: 4,
    minPadding: 8,
    alwaysPadding: false,
    zoomToFit: true,
    cropToFit: false,
    cropToFitIfFullscreen: false,

    flexible: false,
    fitToWindowHeight: false,
    fitToWindowHeightMargin: 20,

    fullscreen: false,
    fullscreenIcon: false,

    vertical: false,

    arrows: true,
    arrowsColor: null,
    arrowPrev: null,
    arrowNext: null,

    spinnerColor: '#808080',

    nav: 'thumbs', // or 'dots', or 'none'
    navPosition: 'auto',
    // 'top' | 'right' | 'bottom' || 'left'   
    navBackground: null,
    dotColor: null,
    thumbSize: null, // 36 or 51, whatever :-)
    thumbMargin: 4,
    thumbBorderWidth: 2,
    thumbBorderColor: null,
    // 'white', '#ff9', or even '#00ff84 #00eb89 #00b66f'
    thumbsCentered: true,
    hideNavIfFullscreen: false,

    caption: 'overlay', // 'simple', or 'none'

    preload: 3,
    preloader: 'dark', // or 'white'

    shadows: true,

    data: null,
    // e.g. [{img: 'http://fotoramajs.com/;-)/03.jpg'}, {img: 'broken.jpg'}, {img: 'http://fotoramajs.com/;-)/13.jpg'}]

    html: null,

    hash: false,
    startImg: 0,

    cssTransitions: true,

    onShowImg: null,
    // function(data){alert('Photo #'+(data.index+1)+' is coming!')}
    onClick: function(data){
        window.location = '/YourPage.html'
    },
    onFullscreenOpen: null,
    onFullscreenClose: null,
    onTransitionStop: null
});

Может кто-нибудь помочь, пожалуйста? Заранее спасибо.


person Buford    schedule 14.06.2013    source источник


Ответы (3)


Хорошо, пока жду лучших решений: (я тестировал первый пример)

HTML:

<h1>Fotorama example</h1>

<div class="fotorama" data-width="499" data-height="333" data-click="false">
    <a  href="i/01.jpg"><img src="i/thumbs/01.jpg"  ></a>
    <a  href="i/02.jpg"><img src="i/thumbs/02.jpg"  ></a>
    <a  href="i/03.jpg"><img src="i/thumbs/03.jpg"  ></a>

</div>

Обратите внимание, что data-click=false -> этот параметр доступен, и он остановит «Перемещение между изображениями по щелчку».

А теперь взломайте:

JQuery

$(window).load(function() {

links=new Array('http://www.google.com','http://www.yahoo.com','http://www.facebook.com' );


     jQuery.each($(".fotorama img"), function(i) {

$(this).attr('title',links[i]);


});

$(".fotorama img").click(function() {

    loc=$(this).attr('title');
    //alert(loc);

    window.location=loc;

});


});

Это будет работать, но я также хотел бы увидеть лучшее решение. @Gökhan Girgin - да, очень странный, запутанный сценарий слайд-шоу... :)

person sinisake    schedule 15.06.2013
comment
Спасибо Неважно! Это огромно! С нашей стороны он работает, хотя, похоже, он отключает некоторые другие javascripts, работающие на странице. Это немного ошибочно, поэтому я понимаю, почему предлагается лучшее решение. (Ошибка означает, что изображения и соответствующие им клики, похоже, не имеют постоянного порядка, но я могу с этим работать.) Еще раз спасибо всем вашим ребятам за помощь, и я опубликую, если найду больше информации об этом. - person Buford; 18.06.2013
comment
Еще пара вещей по этому поводу, мне было интересно, может ли кто-нибудь помочь или объяснить. Во-первых, в приведенном выше примере Neverminds предоставляются ссылки. Как вы думаете, мы могли бы каким-то образом сопоставить каждое основное изображение, а не просто переходить к одной ссылке? Во-вторых, есть ли какой-либо контроль над тегами alt изображений, а не просто отображение ссылки назначения изображения? В очередной раз благодарим за помощь! - person Buford; 18.06.2013
comment
@ Буфорд, НП. Однако - решение не должно быть глючным, остальные скрипты должны работать нормально, если нет коллизии имен переменных или чего-то в этом роде... Проблема с этим (fotorama) скриптом - он запутан (намеренно, я сказал бы), и его трудно изменить -› также, если вы сохраните свой тестовый файл, вы заметите странный источник html (вывод из скрипта) - он помещает большие пальцы в тег холста - они не могут быть сохранены (?) (попробуйте), так вот, после сохранения страницы в html исходнике присутствуют только большие картинки... хотя и фигня, конечно... :) - person sinisake; 18.06.2013
comment
Хм, спасибо за наводку. Неважно, надо будет проверить. Для всех, у кого могут возникнуть проблемы со сценариями (как я упоминал выше), моя проблема заключалась в том, что у меня было два запущенных экземпляра jquery, а нужен был только один. - person Buford; 18.06.2013
comment
Теперь все работает хорошо :) Я разобрался со сценарием (упомянутым выше), в этом и была проблема. Единственный другой вопрос (вопросы) касался тегов alt для изображений (в отличие от отображения целевого URL-адреса) и возможности сопоставления изображения (каждое вращающееся изображение будет иметь другую карту), а не одного целевого URL-адреса. . @ Неважно, ты мне очень помог, еще раз спасибо. Я также открыт для других сценариев вращающихся баннеров, которые достигают того же эффекта без обфускации фоторамы. :) - person Buford; 18.06.2013
comment
Это не будет работать для мобильных устройств, так как событие клика, к сожалению, не запускается. - person Chris; 15.06.2017

Взгляните на первый data-href

<img src="http://fotoramajs.com/;-)/th/03.jpg" data-href="http://example.com" alt="Masha">

и добавьте скрипт на свою страницу

$(document).on("click","img",function(){

var url = $(this).data("href");
if(url != undefined && url != null)
{
   $(location).attr("href",url);
}

});
person Gökhan Girgin    schedule 15.06.2013
comment
Так не пойдет. Fotorama создает определенный вывод, ссылки на изображения здесь на самом деле являются ссылками на превью, и любой установленный вами атрибут недоступен при загрузке страницы ... - person sinisake; 15.06.2013
comment
Я ничего не знаю о плагине, но почему лишний атрибут ломает плагин? слишком странно. - person Gökhan Girgin; 15.06.2013
comment
Действительно очень странно @GökhanGirgin: D - person Tolga Evcimen; 06.07.2015

Я знаю, что это старый вопрос, но я нашел лучшее решение в проблемах проекта github.

Взято с артполикарпов:

Вот как вы оборачиваете изображения ссылками:

<div class="fotorama">
    <div data-img="1.jpg"><a href="http://google.com/"></a>
    </div>
    <div data-img="2.jpg"><a href="http://yandex.ru/"></a>
    </div>
</div>

И затем вам нужно сделать эту модификацию в CSS, чтобы она правильно работала в IE:

.fotorama__html div,
.fotorama__html a {
    display: block;
    height: 100%;
    /* Transparent links are not clickable in IE,
       but non-existent background fixes this.
      (Put an empty 1×1 image here to avoid
       errors in console.) */
    background: url(_.gif);
}

Взято с здесь!

person Felipe Correa    schedule 18.06.2015