@@ -539,11 +539,14 @@ module.exports = React.createClass({
539539 this . setState ( {
540540 dragging : true ,
541541 offsetX : dragPoint . clientX - this . state . clientX ,
542- offsetY : dragPoint . clientY - this . state . clientY
542+ offsetY : dragPoint . clientY - this . state . clientY ,
543+ scrollX : document . body . scrollLeft ,
544+ scrollY : document . body . scrollTop
543545 } ) ;
544546
545547
546548 // Add event handlers
549+ addEvent ( document , 'scroll' , this . handleScroll ) ;
547550 addEvent ( document , dragEventFor . move , this . handleDrag ) ;
548551 addEvent ( document , dragEventFor . end , this . handleDragEnd ) ;
549552 } ,
@@ -565,6 +568,7 @@ module.exports = React.createClass({
565568 this . props . onStop ( e , createUIEvent ( this ) ) ;
566569
567570 // Remove event handlers
571+ removeEvent ( document , 'scroll' , this . handleScroll ) ;
568572 removeEvent ( document , dragEventFor . move , this . handleDrag ) ;
569573 removeEvent ( document , dragEventFor . end , this . handleDragEnd ) ;
570574 } ,
@@ -600,6 +604,19 @@ module.exports = React.createClass({
600604 } ) ;
601605 } ,
602606
607+ handleScroll : function ( e ) {
608+ var s = this . state , x = document . body . scrollLeft , y = document . body . scrollTop ;
609+ var offsetX = x - s . scrollX , offsetY = y - s . scrollY ;
610+ this . setState ( {
611+ scrollX : x ,
612+ scrollY : y ,
613+ clientX : s . clientX + offsetX ,
614+ clientY : s . clientY + offsetY ,
615+ offsetX : s . offsetX - offsetX ,
616+ offsetY : s . offsetY - offsetY
617+ } ) ;
618+ } ,
619+
603620 onMouseDown : function ( ev ) {
604621 // Prevent 'ghost click' which happens 300ms after touchstart if the event isn't cancelled.
605622 // We don't cancel the event on touchstart because of #37; we might want to make a scrollable item draggable.
0 commit comments