Вызовите colorbox из URL, используя JavaScript - PullRequest
3 голосов
/ 04 января 2012

Моя цель - открыть медиа-ресурс в colorbox в соответствии с URL-адресом, указанным в моей адресной строке.

Тема уже достаточно обсуждалась в Интернете, но я не могу заставить ее работать, используя URL с добавленным в конец '? Open = true', чтобы открыть определенное видео при загрузке URL.

HTML-код

<ul>          <li class="media-row">

          <a rel="" class="colorbox-inline initColorboxInline-processed cboxElement" href="/?width=600px&amp;height=400px&amp;title=&amp;inline=true#colorbox-inline-1"><img width="205" height="115" class="imagecache imagecache-lightbox_small" title="" alt="" src="http://localhost:8888/sites/default/files/imagecache/lightbox_small/emvideo-vimeo-33340864.jpg"></a><div style="display: none;"><div id="colorbox-inline-1"><div class="emvideo emvideo-video emvideo-vimeo"><div class="media-vimeo" id="media-vimeo-1">
    <iframe width="600" height="375" src="http://player.vimeo.com/video/33340864?fullscreen=1&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;autoplay=0"></iframe>
</div>
</div>
</div></div>    
          <h3>Sample Video</h3>    
          <p>Lorem ipsum dolor sit ame
</p>            
      </li>
          <li class="media-row">

          <a rel="" class="colorbox-inline initColorboxInline-processed cboxElement" href="/?width=600px&amp;height=400px&amp;title=&amp;inline=true#colorbox-inline-2"><img width="205" height="115" class="imagecache imagecache-lightbox_small" title="" alt="" src="http://localhost:8888/sites/default/files/imagecache/lightbox_small/emvideo-vimeo-9445708.jpg"></a><div style="display: none;"><div id="colorbox-inline-2"><div class="emvideo emvideo-video emvideo-vimeo"><div class="media-vimeo" id="media-vimeo-2">
    <iframe width="600" height="375" src="http://player.vimeo.com/video/9445708?fullscreen=1&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;autoplay=0"></iframe>
</div>
</div>
</div></div>    
          <h3>Custom Video</h3>    
          <p>Lorem ipsum dolor sit amet, conse
</p>            
      </li>
          <li class="media-row">

          <a rel="" class="colorbox-inline initColorboxInline-processed cboxElement" href="/?width=600px&amp;height=400px&amp;title=&amp;inline=true#colorbox-inline-3"><img width="205" height="115" class="imagecache imagecache-lightbox_small" title="" alt="" src="http://localhost:8888/sites/default/files/imagecache/lightbox_small/emvideo-vimeo-33989254"></a><div style="display: none;"><div id="colorbox-inline-3"><div class="emvideo emvideo-video emvideo-vimeo"><div class="media-vimeo" id="media-vimeo-3">
    <iframe width="600" height="375" src="http://player.vimeo.com/video/33989254?title=0&amp;fullscreen=1&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;autoplay=0"></iframe>
</div>
</div>
</div></div>    
          <h3>Keor limpon</h3>    
          <p>Med borla dorla shoe
</p>            
      </li>


      </li>
      </ul>

JS

var
vars = [],
hash,
hashes = window.location.href.slice(window.location.href.indexOf('?')
    + 1).split('&');
        for(var i = 0; i < hashes.length; i++) {
            hash = hashes[i].split('=');
            vars.push(hash[0]);
            vars[hash[0]] = hash[1];
        }
       $(".colorbox-inline").colorbox({open:vars['open'] == 'true' ? true : false});

1 Ответ

1 голос
/ 04 января 2012

Ваш подход - хорошее начало, но причина, по которой он не работает, заключается в том, что вам также нужно настроить способ для colorbox, чтобы он нацеливался на каждый colorbox отдельно.На данный момент colorbox получает коллекцию jquery всех элементов с классом colorbox-inline, и если open = true, он всегда будет открывать только первый в коллекции.И поскольку вы не сгруппировали их (назначив им тот же непустой атрибут rel), оставшиеся элементы в коллекции игнорируются.

Для того, чтобы colorbox нацеливался на конкретный colorbox наНа странице укажите идентификаторы для всех цветовых ящиков в вашем html:

<a id="cb1" class="colorbox-inline" href="...">...</a>

Затем в своем javascript создайте экземпляры всех цветовых ящиков, но открывайте цветное поле только в том случае, если один из этих идентификаторов был отправлен в URL (например: http://site.com/page.html?open=cb1):

//get the colorbox id in url (or set to false if not found)
var colorboxId = 
        (window.location.href.indexOf('open=')==-1) ?
            false :
            window.location.href.slice(window.location.href.indexOf('open=') + 'open='.length + 1).split('&')[0];

//OR: if you prefer using regular expressions, you can tidy
//that up with something like this:
var colorboxId = url.match(/open=([\w\d]*)/) && RegExp.$1 || false;

//instantiate all colorboxes on the page (but do not open any)
$(".colorbox-inline").colorbox();

//if the id of the colorbox was sent in the url, open it now
if(colorboxId!==false) {
    $('#' + colorboxId).colorbox({open:true});
}
...