Jcrop — проблемы с областью обрезки и размером изображения

У меня есть некоторые проблемы с размером области обрезки Jcrop. В моем собственном простом приложении я использовал Jcrop без каких-либо проблем, но теперь я использую Jcrop в другом веб-приложении (Virtual Viewer Snowbound). Вот скриншот моего беспроблемного приложения:

введите здесь описание изображения

Я добавил все файлы Jcrop js и css в папки другого веб-сайта по правильным путям. Я думаю, что нет проблем с расположением файлов. Но, вероятно, что-то внутри CSS этого веб-сайта и CSS Jcrop конфликтует и мешает ему работать должным образом.

Во-первых, я добавил эти библиотеки в самую нижнюю часть тегов заголовка (первый я закомментировал, потому что на сайте установлена ​​версия Jquery 1.9.1, поэтому он конфликтует:

<!-- <script src="js/jquery.min.js" type="text/javascript"></script>-->
    <script src="js/jquery.Jcrop.min.js" type="text/javascript"></script>
    <link rel="stylesheet" href="css/jquery.Jcrop.css" type="text/css" />

Затем записываются функции Jcrop:

jQuery(document).ready(function(){
        jQuery(function ($) {

                $('#vvImageCanvas').Jcrop({
                    onChange: updatePreview,
                    onSelect: updatePreview,
                    setSelect: [100,100,200,200],
                    bgColor: 'black',
                    allowSelect: true,
                    allowMove: true,
                    allowResize: true,
                    aspectRatio: 0  
                });

                function updatePreview(c) {
                    if (parseInt(c.w) > 0) {
                        // Show image preview
                        var imageObject = $("#vvImageCanvas")[0];
                        var canvas = $("#previewMyCanvas")[0];
                        var context = canvas.getContext("2d");

                        if (imageObject != null && c.x != 0 && c.y != 0 && c.w != 0 && c.h != 0) {
                            context.drawImage(imageObject, c.x, c.y, c.w, c.h, 0, 0, canvas.width, canvas.height);
                        }
                    }
                };
            }
        );  
    });

Как вы видите, vvImageCanvas — это холст, который содержит изображение, и я показываю предварительный просмотр внутри холста previewMyCanvas. Проблема заключается в размере области обрезки. Если я добавлю этот код ниже:

style="width:auto!important; height:auto!important;"

в

<canvas id="vvImageCanvas" class="vvCanvas">

теги, то у меня есть следующий вид:

введите здесь описание изображения

Как вы видите в предварительном просмотре, я могу обрезать, где хочу, но область обрезки не имеет того же размера, что и изображение. Я думаю, что это div jcrop-holder, но я не профессионал в вопросах css.

Если я не добавлю эти параметры стиля, у меня будет следующее:

введите здесь описание изображения

Обрезаемая область имеет тот же размер, что и изображение, но изображение становится меньше, и, как вы видите в предварительном просмотре, обрезанная область отличается от области, которую я обрезаю. Возможно, он обрезает реальный размер изображения.

Итак, как я могу использовать функции Jcrop без конфликтов. я добавил

 jQuery.noConflict(true);

но это не помогло.

Спасибо.

ИЗМЕНИТЬ:

Хорошо, я понял проблему.

Функции Jcrop должны работать после загрузки страницы. Но я не могу добиться этого, записывая эти коды в блоки document.ready или window.load. Это и было причиной того, что я задал этот вопрос.

Затем я запустил код нажатием кнопки. Это сработало. Но я не знаю, почему он не работает внутри document.ready и работает в событии нажатия кнопки. Также я должен заставить его работать при загрузке страницы автоматически, а не по нажатию кнопки.

Любой совет?


person Orkun Bekar    schedule 26.12.2014    source источник


Ответы (1)


Это дикое предположение, поскольку вы не предоставили демо, но я сталкивался с подобными проблемами в следующих случаях:

  • Элемент Jcrop был анимирован с использованием переходов CSS3.
  • К родительскому элементу jcrop было применено правило CSS, управляющее шириной, высотой, максимальной шириной или максимальной высотой всех тегов img внутри

Исправление для второго случая очевидно - вам нужно применять свои пользовательские правила только к тем изображениям, которые вам нужно настроить - не забывайте, что Jcrop создает свои собственные элементы в DOM в том же контейнере, что и исходное изображение.

В случае использования переходов CSS3 вам нужно вызвать Jcrop после завершения всех переходов для вашего элемента:

$("#image").bind("transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd", function(){
  // your Jcrop code
});

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

person MakG    schedule 11.01.2015