Skip to content

Instantly share code, notes, and snippets.

@gatapia
Forked from mattpodwysocki/Drag.html
Created September 14, 2011 01:51
Show Gist options
  • Save gatapia/1215672 to your computer and use it in GitHub Desktop.
Save gatapia/1215672 to your computer and use it in GitHub Desktop.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Drag example</title>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script src="http://jeffrey.reactiveextensions.net/rx.js" type="text/javascript"></script>
<script src="http://jeffrey.reactiveextensions.net/rx.jQuery.js" type="text/javascript"></script>
<script type="text/javascript">
function drag(dragTarget) {
var mouseUp = dragTarget
.toObservable("mouseup");
var mouseMove = dragTarget
.toObservable("mousemove");
var mouseDown = dragTarget
.toObservable("mousedown")
.Select(function(event) {
return { left : event.clientX - dragTarget.offset().left,
top : event.clientY - dragTarget.offset().top }; });
return mouseDown
.SelectMany(function(imageOffset) {
return mouseMove
.Do(function(event) { event.preventDefault(); })
.Select(function(pos) {
return { target : dragTarget,
left : pos.clientX - imageOffset.left,
top : pos.clientY - imageOffset.top }; })
.TakeUntil(mouseUp); });
}
$(document).ready(function() {
var observer = Rx.Observer.Create(
function(pos) {
pos.target.css("left", pos.left);
pos.target.css("top", pos.top);
});
drag($("#dragTarget1")).Subscribe(observer);
drag($("#dragTarget2")).Subscribe(observer);
});
</script>
</head>
<body>
<div id="dragTarget1"
style="background-color: #000000; border: 1px solid #666666;
color: #ffffff; padding: 10px; position: absolute;
font-family: sans-serif; cursor: move">
Drag Me!
</div>
<div id="dragTarget2"
style="background-color: #0000FF; border: 1px solid #666666;
color: #ffffff; padding: 10px; position: absolute;
font-family: sans-serif; cursor: move; left: 150px">
Drag Me Too!
</div>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment