Animated Cursor
Note: this application is self-signed because getting the mouse position is prohibited in the sandbox.
Script
animatedCursor.fx
import java.awt.MouseInfo; import java.awt.PointerInfo; import javafx.animation.KeyFrame; import javafx.animation.Timeline; import javafx.scene.Cursor; import javafx.scene.Scene; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.input.MouseEvent; import javafx.scene.paint.Color; import javafx.scene.shape.Rectangle; import javafx.stage.Stage; // positions of cursor images var previousX: Number[] = [-10000, -10000, -10000, -10000, -10000]; var previousY: Number[] = [-10000, -10000, -10000, -10000, -10000]; // images that chase the mouse pointer var images: ImageView[] = for (i in [4..0 step -1]) { ImageView { x: bind previousX[i] y: bind previousY[i] image: Image { url: "{__DIR__}duke{i}.gif" } } }; var stage = Stage { title: "Animated Cursor Sample" scene: Scene { width: 300 height: 300 content: [ Rectangle { // displaying image instead of cursor cursor: Cursor.NONE x: 20 y: 20 width: 260 height: 260 fill: Color.AQUAMARINE onMouseExited: function(event: MouseEvent) { // when mouse pointer moves out of the application area, // show images for (image in images) { image.visible = false; } } onMouseEntered: function(event: MouseEvent) { // when mouse pointer moves into the application area, // hide images for (image in images) { image.visible = true; } } }, images ] } } var timeline = Timeline { repeatCount: Timeline.INDEFINITE keyFrames: [ KeyFrame { // call action every 100ms time: 100ms action: function() { // get the position of mouse pointer var point:PointerInfo = MouseInfo.getPointerInfo(); var x: Number = point.getLocation().x; var y: Number = point.getLocation().y; // caliculate the local position from the global position x = x - stage.x - stage.scene.x; y = y - stage.y - stage.scene.y; // update images positions insert x before previousX[0]; delete previousX[5]; insert y before previousY[0]; delete previousY[5]; } } ] }; // Start the animation. timeline.play();