2014-01-11 1 views
1

Я отобразил изображение на холсте, и я пытаюсь добавить к нему функцию щелчка, чтобы он запускал событие. Однако .click() не работает. Есть ли другая функция, которую я могу использовать?Как добавить функцию щелчка к изображению jQuery

JQuery:

function homeScreen() 
{  
    var backImage = new Image(); 
    var playButton = new Image(); 
    backImage.onload = function() 
    {  
     context.drawImage(backImage, 0, 0); 
     context.drawImage(playButton, 400, 600);     
    }; 
    backImage.src="images/homeBackground.jpg"; 
    playButton.src="images/play.png"; 

    $(playButton).click(function() { 
     alert("Hey"); 
    }); 
} 
+1

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

+0

Что такое «образ jQuery»? – nnnnnn

+1

@nnnnnn это изображение jQuery: http://brand.jquery.org/resources/jquery-mark-dark.gif –

ответ

1

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

$('canvas').on('click', function(e) { 
    if (e.pageX >= leftEdgeOfButton && e.pageX <= rightEdgeOfButton 
     && e.pageY >= topEdgeOfButton && e.pageY <= bottomEdgeOfButton) { 
    // handle click event 
    } 
}); 

Что касается положения краев кнопки, я уверен, что вы можете рассчитать эти значения: для левого и верхнего края, вероятно, так же, как и значения, которые используются для определения координат, где изображение должны быть нарисованы, а справа/внизу - только левый или правый края плюс ширина или высота кнопки.

Если холст не имеет одинакового размера со всем экраном, вы можете добавить левое и верхнее смещение холста к e.pageX и e.pageY для изготовления и настройки.

$('canvas').on('click', function(e) { 
    if (e.pageX + leftOffsetOfCanvas >= leftEdgeOfButton 
     && e.pageX + leftOffsetOfCanvas <= rightEdgeOfButton 
     && e.pageY + leftOffsetOfCanvas >= topEdgeOfButton 
     && e.pageY + leftOffsetOfCanvas <= bottomEdgeOfButton) { 
    // handle click event 
    } 
}); 

Вы можете использовать .offset() функции JQuery, чтобы получить верхнее и левое смещение элемента холста.

1

Вобще:

playButton.onclick = function() { 
    //func stuff 
} 
+1

Изображение, которое нарисовано только на холсте и не добавлено в dom, доступно для кликов? Хотя я не знаю, я не могу в это поверить. –

+1

Почему это работает, если '$ (playButton) .click (...' не сделал? – nnnnnn

0

Использование .on() method на динамически созданный HTML

$(playButton).on("click",function() { 
     alert("Hey"); 
    }); 
+1

'$ (...). Click (callback)' и '$ (...). On ('click' , обратный вызов) '- это точно то же самое. –

+0

@ t.niese var playButton = new Изображение(); playButton динамически создается –

+0

Код, который вы показали с' .on() ', в точности эквивалентен' .click() 'code, показанный в вопросе. Обратите внимание, что' .click() 'работает с динамически добавленными элементами _if_' .click() 'вызывается _after_, элементы добавляются. Но вся динамическая/статическая проблема здесь не проблема: OP пытается обрабатывать клики по тому, что было нарисовано на части элемента canvas, что не то же самое, что обработка кликов на элементе img. – nnnnnn