Comments (3)
@a-samy Hmm, I bet this has to do with some special logic in jCanvas to defer redrawing of successive layers until an image layer has loaded. Try moving the image layer to the end (that is, make it the last layer) and let me know if that resolves the issue.
from jcanvas.
When I made image the last layer, the event works fine with the shape and just triggered once with the image, and in my case I have multi-layers of images and I need to have actions on each image, is there any other way to do so with jCanvas?
from jcanvas.
@a-samy My apologies for the late response.
I tried your code in the jCanvas Sandbox and can't actually reproduce the issue, strangely.
$(function() {
$('canvas').addLayer({
type: 'image',
name: 'fish',
source: $('#fish')[0],
x: 150,
y: 150,
width: 78,
height: 100,
mouseover: function(layer) {
alert('fish');
}
}).addLayer({
type: 'rectangle',
name: 'fishSpot',
fillStyle: '#c33',
x: 150,
y: 300,
width: 90,
height: 120,
mouseover: function(layer) {
alert('rectangle');
}
}).drawLayers();
})
But assuming this is definitely a problem for you, your alternative approach is to use a mousemove
handler instead (which should behave much more consistently, since that uses the native DOM event under the hood). The only catch is that you'll need to add extra logic to make it behave like a mousemove
event, which shouldn't actually be very difficult (and I'll try to outline an approach for you):
- Create a variable or property that's accessible to all layer
mousemove
handlers; this variable will be used to keep track of which layer you're currently mousing over. For the purpose of this proof-of-concept, I will call this variablemousedoverLayer
- Add a layer behind all others layers, whose size is the width and height of the canvas (e.g.
x: 0, y: 0, width: $canvas.width(), height: $canvas.height(), fromCenter: false
). This layer will be used to detect when you mouse off of a layer - Within each
mouseover
, handler, make sure you have the currentlayer
parameter defined; e.g.mouseover: function(layer) { ... }
- Wrap the body of each
mouseover
handler with anif
statement like the following:if (mousedoverLayer !== layer) { mousedoverLayer = layer; ... }
; this is the check that makes yourmousemove
behave like amouseover
I think that's all you'd need. Let me know your thoughts.
from jcanvas.
Related Issues (20)
- Handles not working properly after the canvas is resized HOT 7
- Animations are very CPU intensive HOT 1
- Handle plugin missing basic feature - Text HOT 3
- Handle plugin missing advanced feature - Rotation Handle HOT 1
- How to add space between the characters in text HOT 1
- Replacement for a deprecated method: $.jCanvas() HOT 1
- jcanvas21.0.1 in fireFox(70.0.1 ) removeLayer() and removeLayers() has bug HOT 1
- Rotate Text Alignment HOT 6
- How to animate the closed: true option line (drawLine) HOT 7
- if use css set canvas to half of it,and then can't drag,how to fixed this? HOT 1
- Submitting a project to the Gallery HOT 2
- Getting Uncaught TypeError: Cannot read property 'text' of undefined HOT 1
- Tainted canvases may not be exported HOT 1
- How to import jCanvas to work with Angular? HOT 11
- handle for text type HOT 6
- How to draw a Bezier in animation? HOT 1
- Export Canvas: Excluding certain objects HOT 4
- Handles can't vanish like a layer HOT 2
- multi-touch - future HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from jcanvas.