Использовать возвращаемые значения JavaScript в jQuery - PullRequest
1 голос
/ 27 января 2011

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

Я пытаюсь написать небольшую функцию в JS, которую я могу вызвать из jQuery для изменения размера изображения. Дело в том, что я понятия не имею, как вернуть значения обратно в jQuery после запуска функции JS. Вот что у меня есть:

$('a').click(function() {
    var slideshowHeight = $(this).closest('.stage').css('height')
    var slideshowWidth = $(this).closest('.stage').css('width')
    var newImageHeight = $(this).attr('data-height')
    var newImageWidth = $(this).attr('data-width')

    fit_within_box(slideshowWidth, slideshowHeight, newImageWidth, newImageHeight);

    $(this).children('img').css('width',new_width);
    $(this).children('img').css('width',new_height);
}

function fit_within_box(box_width, box_height, width, height)
{
    var new_width = width
    var new_height = height
    var aspect_ratio = parseInt(width) / parseInt(height)

    if (new_width > box_width)
    {
        new_width = box_width
        new_height = int(new_width / aspect_ratio)
    }

    if (new_height > box_height)
    {
        new_height = box_height
        new_width = int(new_height * aspect_ratio)
    }
    return (new_width, new_height)
}

Как видите, я пытаюсь ввести некоторые значения и вернуть new_width и new_height.

Спасибо за помощь!

Ответы [ 3 ]

1 голос
/ 27 января 2011

Если вы хотите вернуть оба значения одновременно, вы можете сделать это с помощью литерала объекта ...

return {
   width: new_width,
   height: new_height
};
0 голосов
/ 27 января 2011

Эй, вот рабочий пример, я исправил несколько небольших ошибок, например вы использовали ширину дважды на children('img');

JQuery:

$(function(){
    $('a').click(function() {
        var slideshowHeight=$(this).closest('.stage').height();
        var slideshowWidth=$(this).closest('.stage').width();
        var newImageHeight=$(this).attr('data-height');
        var newImageWidth=$(this).attr('data-width');
        var size=fit_within_box(slideshowWidth,slideshowHeight,newImageWidth,newImageHeight);
        $(this).children('img').css({'width':size[0],'height':size[1]});
    });

    function fit_within_box(box_width,box_height,new_width,new_height){
        var aspect_ratio=new_width/new_height;
        if(new_width>box_width){
            new_width=box_width;
            new_height=Math.round(new_width/aspect_ratio);
        }
        if(new_height>box_height){
            new_height=box_height;
            new_width=Math.round(new_height*aspect_ratio);
        }
        return [new_width,new_height];
    }
});

HTML с некоторыми обоями:

<div class="stage" style="width:200px;height:200px;">
<a href="#" data-width="1280" data-height="1024"><img src="wallpaper_1280x1024.jpg" /></a>
</div>

Приветствия

G.

0 голосов
/ 27 января 2011

вы можете попытаться вернуть объект JSON следующим образом:

return {
    new_height:height,
    new_width:width
};

и использовать его в своей функции jquery:

var fit_img = fit_within_box(...);
...
$(this).children('img').css('height',fit_img.new_height);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...