是否可以在选择框更改时设置/更新 jCrop 纵横比?

Posted

技术标签:

【中文标题】是否可以在选择框更改时设置/更新 jCrop 纵横比?【英文标题】:Is it possible to set/update jCrop aspect ratio on select box change? 【发布时间】:2014-02-20 08:14:46 【问题描述】:

我添加了一个比率和选择变量,并在选择警报右值

时无法将其工作静态,但无法在选择更改中进行工作。
    jQuery(function ($) 
        var ratio = 4 / 3
        var selection = '[0,0,4,3]';
        $("#ratio").change(function () 
            var text = $(this).find(':selected').text();
            ratio = text;
            val = $(this).val();
            selection = '[0,0,' + val + ']';
            alert(ratio)
        ).trigger('change');

        // Create variables (in this scope) to hold the API and image size
        var jcrop_api,
            boundx,
            boundy,
        // Grab some information about the preview pane
            $preview = $('#preview-pane'),
            $pcnt = $('#preview-pane .preview-container'),
            $pimg = $('#preview-pane .preview-container img'),
            xsize = $pcnt.width(),
            ysize = $pcnt.height();
            console.log('init', [xsize, ysize]);

        $('#target').Jcrop(
            onChange: updatePreview,
            onSelect: updateCoords,
            setSelect: selection,
            aspectRatio: ratio
        , function () 
            // Use the API to get the real image size
            var bounds = this.getBounds();
            boundx = bounds[0];
            boundy = bounds[1];
            // Store the API in the jcrop_api variable
            jcrop_api = this;
            // Move the preview into the jcrop container for css positioning
            $preview.appendTo(jcrop_api.ui.holder);
        );
        $('#coords').on('change', 'input', function (e) 
            var x1 = $('#X').val(),
                y1 = $('#Y').val();
            jcrop_api.setSelect([x, y]);
        );

        function updatePreview(c) 
            if (parseInt(c.w) > 0) 
                var rx = xsize / c.w;
                var ry = ysize / c.h;
                $pimg.css(
                    width: Math.round(rx * boundx) + 'px',
                    height: Math.round(ry * boundy) + 'px',
                    marginLeft: '-' + Math.round(rx * c.x) + 'px',
                    marginTop: '-' + Math.round(ry * c.y) + 'px'
                );
            
        ;
    );

    function updateCoords(c) 
        $('#X').val(Math.round(c.x));
        $('#Y').val(Math.round(c.y));
        $('#W').val(Math.round(c.w));
        $('#H').val(Math.round(c.h));
    ;

这是我不坚持的选择值和文本:

<select  id="ratio">
    <option value="4,3">1.3</option>
    <option value="6,3">1.6</option>
    <option value="9,3">.8</option>
</select>

【问题讨论】:

【参考方案1】:

您可以通过以下方式设置纵横比:

 jcrop_api.setOptions(
    aspectRatio: yourAspectRatioValue
 ); 

在您的代码中,

$("#ratio").change(function () 
        var text = $(this).find(':selected').text();
        ratio = text;
        val = $(this).val();
        selection = '[0,0,' + val + ']';
        jcrop_api.setOptions(
        aspectRatio: ratio
        ); 
  ).trigger('change');

但是将此代码放在您在图像上应用 jCrop 的代码之后。

【讨论】:

我在代码中的任何地方都试过了,但没有使用我的变量 哦,工作了..我之前尝试过但返回错误并且没有注意它是api参考:)..谢谢 对不起,也可以添加 setSelect 吗?我使用了 setSelect: selection, aspectRatio: ratio 并且当添加为静态或从选择框添加为变量时它会转到左上角 如果你有时间,最后一个问题,抱歉。我们是否可以在更改选择时使用 updateCoords 设置输入值?或者那个(c)变量是什么?如何从 $('#target').Jcrop() 函数中的函数发送并返回 NaN。再次感谢你 问题是如何从select传递一个值并与选择数组结合....'[0,0,' + val + ']'不适合工作

以上是关于是否可以在选择框更改时设置/更新 jCrop 纵横比?的主要内容,如果未能解决你的问题,请参考以下文章

裁剪插件jCrop

以编程方式更改模型时选择框不更新

使用 Jcrop,更改图像时无法正确刷新预览窗格

如何在临时图像上使用 jCrop?

输入文件在 JCrop 中显示实时选择的图像

jCrop 在更改图像时使用正确的坐标调整大小