diff options
author | Jörn Zaefferer <joern.zaefferer@gmail.com> | 2012-04-13 16:05:29 +0200 |
---|---|---|
committer | Jörn Zaefferer <joern.zaefferer@gmail.com> | 2012-04-13 16:05:29 +0200 |
commit | a5fc9eb7db292629271e6414db9e98c3dc60224d (patch) | |
tree | 4a69486080e5176ff62490d3fd963ecd72ab1aaf /tests/visual | |
parent | cb67eb535c0f695941235f402cc4b405f70bc022 (diff) | |
download | jquery-ui-a5fc9eb7db292629271e6414db9e98c3dc60224d.tar.gz jquery-ui-a5fc9eb7db292629271e6414db9e98c3dc60224d.zip |
Position: Expose target and element dimensions to allow further customization, like calculating the angle between the two elements
Diffstat (limited to 'tests/visual')
-rw-r--r-- | tests/visual/position/position_feedback.html | 12 | ||||
-rw-r--r-- | tests/visual/position/position_feedback_rotate.html | 105 |
2 files changed, 111 insertions, 6 deletions
diff --git a/tests/visual/position/position_feedback.html b/tests/visual/position/position_feedback.html index 5b50ff32c..f23d8a299 100644 --- a/tests/visual/position/position_feedback.html +++ b/tests/visual/position/position_feedback.html @@ -13,13 +13,13 @@ <script type="text/javascript"> $(function() { function using( position, feedback ) { - $(this).offset( position ); - $(this).text(feedback.horizontal + " " + feedback.vertical + " " + feedback.important) $(this) - .removeClass("left right top bottom center middle vertical horizontal") - .addClass(feedback.horizontal) - .addClass(feedback.vertical) - .addClass(feedback.important); + .offset( position ) + .text( feedback.horizontal + " " + feedback.vertical + " " + feedback.important ) + .removeClass( "left right top bottom center middle vertical horizontal" ) + .addClass( feedback.horizontal ) + .addClass( feedback.vertical ) + .addClass( feedback.important ); } var target = $("#target").position({ my: "center", diff --git a/tests/visual/position/position_feedback_rotate.html b/tests/visual/position/position_feedback_rotate.html new file mode 100644 index 000000000..a93287e7d --- /dev/null +++ b/tests/visual/position/position_feedback_rotate.html @@ -0,0 +1,105 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8" /> + <title>Position Visual Test: Default</title> + <link rel="stylesheet" href="../visual.css" type="text/css" /> + <link rel="stylesheet" href="../../../themes/base/jquery.ui.all.css" type="text/css" title="ui-theme" /> + <script type="text/javascript" src="../../../jquery-1.7.2.js"></script> + <script type="text/javascript" src="../../../ui/jquery.ui.core.js"></script> + <script type="text/javascript" src="../../../ui/jquery.ui.widget.js"></script> + <script type="text/javascript" src="../../../ui/jquery.ui.position.js"></script> + <script type="text/javascript" src="../../../ui/jquery.ui.menu.js"></script> + <script type="text/javascript"> + $(function() { + function using( position, feedback ) { + var angleRad = Math.atan2( feedback.target.top + feedback.target.height / 2 - feedback.element.top - feedback.element.height / 2, feedback.target.left + feedback.target.width / 2 - feedback.element.left - feedback.element.width / 2 ) * 180 / Math.PI; + var angle = (Math.round( angleRad * 100) / 100 ); + $(this) + .offset( position ) + .text( feedback.horizontal + " " + feedback.vertical + " " + feedback.important + " " + angle + "°" ) + .css({ + "-webkit-transform": "rotate(" + angle + "deg)", + "-moz-transform": "rotate(" + angle + "deg)", + "-ms-transform": "rotate(" + angle + "deg)", + "-o-transform": "rotate(" + angle + "deg)", + "transform": "rotate(" + angle + "deg)" + }); + } + var target = $("#target").position({ + my: "center", + at: "center", + of: window + }); + var element = $(".element"); + $.each([ + "center top-100", + "right+25 top-50", + "right+75 top", + "right+75 center", + "right+75 bottom", + "right+25 bottom+50", + "center bottom+100", + "left-25 bottom+50", + "left-75 bottom", + "left-75 center", + "left-75 top", + "left-25 top-50" + ], function(index, direction) { + element.clone().insertAfter(target).position({ + my: "center", + at: direction, + of: target, + using: using + }) + }); + + var targetOffset = target.offset(); + var oppositeElement = element.clone().width(50).appendTo('body'); + var leftElement = element.clone().width(50).height(150).appendTo('body'); + var rightElement = element.clone().height(150).width(150).appendTo('body'); + element.width(150); + $(document).on( "mousemove", function(event) { + var base = { + my: "left top", + at: "left top", + of: target, + using: using + } + element.position( $.extend({ + offset: (event.pageX - targetOffset.left) + " " + (event.pageY - targetOffset.top) + }, base)); + oppositeElement.position( $.extend({ + offset: (-1 * (event.pageX - targetOffset.left)) + " " + (-1 * (event.pageY - targetOffset.top)) + }, base)); + leftElement.position( $.extend({ + offset: (-0.9 * (event.pageX - targetOffset.left)) + " " + (0.9 * (event.pageY - targetOffset.top)) + }, base)); + rightElement.position( $.extend({ + offset: (0.9 * (event.pageX - targetOffset.left)) + " " + (-0.9 * (event.pageY - targetOffset.top)) + }, base)); + }); + }); + </script> + <style> + #target, .element { + position: absolute; + border: 1px solid black; + border-radius: 5px; + width: 75px; + height: 25px; + padding: 5px; + } + #target { + height: 75px; + } + </style> +</head> +<body> + + <div id="target">all around me</div> + + <div class="element"></div> + +</body> +</html> |