Jquery-rotate работает, если начальный элемент является изображением, но не если canvas - PullRequest
1 голос
/ 28 ноября 2010

http://chrishorsnell.co.uk/emblem/rotate.php

Я пытаюсь повернуть изображение.Плагин jquery rotate (code.google.com/p/jquery-rotate/ # извините, я могу сделать только 1 гиперссылку) плагин работает нормально, у меня есть его для работы с изображением (см. Пример 2), но я пытаюсь реализоватьоно превращается во что-то другое, и изображение уже является холстом (см. пример 1).

Плагин начинается с изображения, затем превращает его в холст и использует его, начиная со второго поворота.Когда я пытаюсь запустить его на холсте, который я уже создал ранее, он не будет работать.

Также при вращении первого примера firebug выбрасывает это

uncaught exception: [Exception... "Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIDOMCanvasRenderingContext2D.drawImage]" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame :: http://chrishorsnell.co.uk/emblem/jquery.rotate.1-1.js :: anonymous :: line 57" data: no]

Это строка 57из jquery.rotate.1-1.js

context.drawImage(canvas.oImage, 0, 0, canvas.oImage.width, canvas.oImage.height);

Я думаю, что проблема находится между строкой 29-34 из jquery.rotate.1-1.js, но не могу понять, как ее отсортировать

    if (!p.oImage) {
        canvas.oImage = new Image();
        canvas.oImage.src = p.src;
    } else {
        canvas.oImage = p.oImage;
    }

Есть предложения?

1 Ответ

0 голосов
/ 28 ноября 2010

Посмотрите на строку 2 jquery.rotate.1-1.js:

jQuery.fn.rotate = function(angle,whence,translate_w,translate_h) {
    var p = this.get(0);

И если вы посмотрите в firebug, когда вы (попытаетесь) повернуть изображение, оно отправит несколько запросов на undefined.

Так? Ну, кажется, вы вызываете rotate() как-то неверно, поэтому его внутренняя функция имеет this == $.

И он вызывает this.get(0), который поэтому интерпретируется как $.get(0) и выполняет XHR для undefined.

Давайте решим часть этого: замените строку 2 на:

var p = $(this).get(0); // don't do this. Instead:

if ( this === jQuery ) { throw new Exception("Don't pass jQuery object here!"); }
var p = this.get(0);

Таким образом, вы не можете случайно вызвать $.get(): произойдет сбой из-за слишком большой рекурсии.

РЕДАКТИРОВАТЬ: Я был глуп. Проверьте это this != jQuery и сгенерируйте ошибку. Гораздо лучше.

Теперь по той причине, что это не получается:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...