#jquery #image #drag-and-drop #background #transparent
#jquery #изображение #перетаскивание #фон #прозрачный
Вопрос:
У меня есть банк изображений, из которого я перетаскиваю фотографии в контейнер.
затем я использую плагин обрезки для этих изображений, чтобы пользователь мог обрезать и скорректировать изображение. обрезка выполняется в разделе обрезки, в то время как изображения в контейнере отображают предварительный просмотр обрезки.
я использую плагины jQuery UI с возможностью перетаскивания и удаления, а также замечательный imgAreaSelect для обрезки и предварительного просмотра.
моя проблема заключается в следующем: при перемещении изображения в контейнер плагин устанавливает атрибут background в качестве источника, а атрибутом source является прозрачное встроенное закодированное изображение (хотелось бы, чтобы кто-нибудь объяснил мне логику, стоящую за этим).
теперь для логики предварительного просмотра плагина imgAreaSelect требуется, чтобы изображение было атрибутом источника. хотя я могу временно заменить атрибут источника и фона, это не идеальное решение.
у кого-нибудь есть идеи?
обновление:
проблема не в самих плагинах, функция обратного вызова для события onChange определяется следующим образом:
function showPreview(coords)
{
var rx = 100 / coords.w;
var ry = 100 / coords.h;
$('#preview').css({
width: Math.round(rx * 500) 'px',
height: Math.round(ry * 370) 'px',
marginLeft: '-' Math.round(rx * coords.x) 'px',
marginTop: '-' Math.round(ry * coords.y) 'px'
});
};
итак, реальный вопрос заключается в том, как включить предварительный просмотр, используя используемые здесь стили css, но с изображением, предоставленным в качестве атрибута background. смотрите демонстрационную версию плагина.
Комментарии:
1. вы пробовали плагин jcrop для jquery с другой обработкой jquery?
2. оба плагина имеют аналогичную функцию обратного вызова. смотрите мое обновление выше для разъяснения вопроса
3. Если я правильно понимаю, это то, что происходит: удаляемый плагин устанавливает фоновое изображение
div
(?), а плагин обрезки получаетimg
элемент с прозрачным изображением в нем?4. хорошо, это то, что происходит, когда вы перетаскиваете изображение, создаются некоторые разделы с абсолютным положением, которые проходят над вашим исходным изображением, чтобы он мог вычислить координаты нового изображения, в то же время он также использует окно предварительного просмотра, где он копирует изображение, затем показывает только часть изображения, используя поля css и ширину. Вопрос в том, почему вам нужно использовать атрибут background, а не оставлять его как есть? также проверьте мой ответ, не уверен, что он будет работать deff, но может направить вас на правильный путь 🙂
Ответ №1:
function preview(img, selection) {
var scaleX = 100 / (selection.width || 1);
var scaleY = 100 / (selection.height || 1);
// console.log($(img).attr('src'));
$('#preview div').css({
width: Math.round(scaleX * 400) 'px',
height: Math.round(scaleY * 300) 'px',
"background-image": 'img_src',
"background-position": '-' Math.round(scaleX * selection.x1) 'px ' '-' Math.round(scaleY * selection.y1) 'px',
});
}
$('#preview');
должен быть div,
var img
, должен содержать ссылку на src, которую вам, возможно, придется захватить из него. используйте console.log
комментарий выше, чтобы посмотреть, даст ли это вам src изображения, затем используйте его в img_src
для предоставления изображения
Ответ №2:
вы правы, Джеймс.
Мне действительно нужно было добавить еще одну строку, хотя:
"background-size": Math.round(scaleX * 400) 'px ' Math.round(scaleY * 300) 'px'
положение фона и размер фона сделали свое дело.
кстати, переменная img действительно содержит исходный код, но проблема была не в этом, поскольку я сохранял разные версии изображения (разных размеров) с помощью метода data ().
Спасибо!