ограничить размер слимбокса (лайтбокса) размером окна - PullRequest
3 голосов
/ 15 июля 2010

Привет всем,

Любой знает, как ограничить размер оверлейного окна Slimbox в процентах от размера окна пользователя (как делает prettyphoto)

Спасибо

Вот код модуля: http://paste.ly/3Kz

И тонкий ящик js: http://paste.ly/3L0

Ответы [ 5 ]

6 голосов
/ 07 марта 2013

На самом деле ни одно из ваших решений не сделало это для меня, поэтому я должен был поместить их в блендер и смешать результат, выполнив это:

как он сказал, обратите внимание на эти строки в slimbox2.js

w(g).css({backgroundImage:"url("+n+")",visibility:"hidden",display:""});
w(p).width(k.width);
w([p,I,d]).height(k.height);

и замените их следующим блоком:

        var winWidth  = window.innerWidth  - 20;
        var winHeight = window.innerHeight - 120;
        if (winWidth > winHeight) { 
            var maxSize = winHeight; 
        } else { 
            var maxSize = winWidth;
        }

        /* determine proper w and h for img, based on original image'w dimensions and maxSize */
        var my_w = k.width; 
        var my_h = k.height;            

        if (my_w > my_h) {
            my_h = maxSize * my_h / my_w;
            my_w = maxSize;
        } else {
            my_w = maxSize * my_w / my_h;
            my_h = maxSize;
        }

        if (k.width > my_w || k.height > my_h){ /* constrain it */
            w(g).css({backgroundImage:"url("+n+")",backgroundSize:""+my_w+"px "+my_h+"px",visibility:"hidden",display:""});
            w(p).width(my_w);
            w([p,I,d]).height(my_h);    
        }
        else { /* default behaviour  NORMAL before hackeing*/
            w(g).css({backgroundImage:"url("+n+")",backgroundSize:"",visibility:"hidden",display:""});
            w(p).width(k.width);
            w([p,I,d]).height(k.height);            
        }       

* будь добр, я начинающий разработчик;)

5 голосов
/ 04 марта 2013

Я пытался использовать решение Redscouse, но я думаю, что он использовал старую версию Slimbox.Вот решение, основанное на v2.04, которое ограничит изображение, чтобы поместиться в текущем окне браузера.

Найдите функцию animateBox ().Рядом с вершиной вы должны найти строки, которые выглядят следующим образом:

$(image).css({backgroundImage: "url(" + activeURL + ")", visibility: "hidden", display: ""});
$(sizer).width(preload.width);
$([sizer, prevLink, nextLink]).height(preload.height);

Замените эти строки на:

/* make sure the image won't be bigger than the window */
var winWidth = $(window).width() - 20;
var winHeight = $(window).height() - 104;
var maxSize = (winWidth > winHeight) ? winHeight : winWidth; /* the smaller dimension determines max size */

/* determine proper w and h for img, based on original image'w dimensions and maxSize */
var my_w = preload.width; 
var my_h = preload.height;
if (my_w > my_h)
{
    my_h = maxSize * my_h / my_w;
    my_w = maxSize;
}
else
{
    my_w = maxSize * my_w / my_h;
    my_h = maxSize;
}

if (preload.width > my_w || preload.height > my_h){ /* constrain it */
    $(image).css({backgroundImage: "url(" + activeURL + ")", backgroundSize: my_w + "px " + my_h + "px", visibility: "hidden", display: ""});
    $(sizer).width(my_w);
    $([sizer, prevLink, nextLink]).height(my_h);
}
else { /* default behaviour */
    $(image).css({backgroundImage: "url(" + activeURL + ")", backgroundSize: "", visibility: "hidden", display: ""});
    $(sizer).width(preload.width);
    $([sizer, prevLink, nextLink]).height(preload.height);
}

Корректировки -20 и -104 должны учитывать дополнительное пространствоэтот slimbox использует вокруг изображения.Не стесняйтесь настраивать их по мере необходимости.

1 голос
/ 28 февраля 2013

У меня была похожая проблема, когда изображение расширялось за пределы размера окна.Я знаю, что мог бы решить эту проблему, ограничив размер изображения при загрузке, но я не хотел этого делать, я бы предпочел установить размер окна Slimbox, поэтому я приступил к задаче, вот что я пришелс и работает отлично!:)

Чтобы упростить настройку в будущем, вы хотите добавить строки userDefinedWidth и userDefinedHeight к вашему звонку в slimbox в параметрах:

Пример:

$(function($) {
    $("a[rel^='lightbox']").slimbox({
    /* Put custom options here */
    userDefinedWidth:640, /* set max width here */
    userDefinedHeight:480, /* set max height here */
    initialWidth: 250,
    initialHeight: 250,
    imageFadeDuration: 400
});

Далее откройте slimbox.js (или slimbox2.js) и снова найдите параметры, на этот раз добавьте userDefinedWidth и userDefinedHeight без значений, например:

w.slimbox=function(O,N,M){
    u=w.extend({
    userDefinedWidth:'',
    userDefinedHeight:'',
    loop:false,
    ...etc.
    ...etc.

Затем найдите функцию с именем i.В функции i замените следующие строки:

w(g).css({backgroundImage:"url("+n+")",visibility:"hidden",display:""});
w(p).width(k.width); 
w([p,I,d]).height(k.height); 

этими строками:

var my_w = u.userDefinedWidth; 
var my_h = u.userDefinedHeight;
w(g).css({backgroundImage:"url("+n+")",backgroundSize:""+my_w+"px "+my_h+"px",visibility:"hidden",display:""});
w(p).width(my_w);
w([p,I,d]).height(my_h);

После того, как вы это сделаете, вы можете идти и сможете изменить размерSlimbox для настройки по вашему выбору.

Пит.

PS: Я php парень разбираюсь с jquery / javascript, так что если кто-нибудь может сделать это лучше / быстрее / проще, пожалуйста, почувствуйтесвободно.О, и, пожалуйста, не стесняйтесь использовать этот код где угодно.;)

0 голосов
/ 25 июня 2011

Хотя ответ Avinash работает, это гораздо проще:

.pp_overlay {max-width:100%; max-height:100%;}

Процент в вышеуказанных полях принимает его как процент от размера браузера пользователя.

Класс .pp_overlayэто то, что называется в PrettyPhoto.Вам нужно будет найти эквивалент для слимбокса.

0 голосов
/ 15 июля 2010

захватывает разрешение окна пользователя и устанавливает ширину и высоту наложения в соответствии с записанной информацией ...

$('#overlay').width($(window).width()).height($(window).height());
...