Changeset 4011
- Timestamp:
- 03/22/06 14:54:51 (2 years ago)
- Files:
-
- spinoffs/scriptaculous/CHANGELOG (modified) (1 diff)
- spinoffs/scriptaculous/src/dragdrop.js (modified) (6 diffs)
- spinoffs/scriptaculous/test/functional/dragdrop2_test.html (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
spinoffs/scriptaculous/CHANGELOG
r3823 r4011 1 1 *SVN* 2 3 * Make it possible to scroll window on dragging, #3921 [thx rdmiller] 2 4 3 5 * Make Element.forceRerendering give up on any exception (this fixes various problems with IE) spinoffs/scriptaculous/src/dragdrop.js
r3789 r4011 213 213 if(!this.handle) this.handle = this.element; 214 214 215 if(options.scroll) options.scroll = $(options.scroll); 215 if(options.scroll && !options.scroll.scrollTo && !options.scroll.outerHTML) 216 options.scroll = $(options.scroll); 216 217 217 218 Element.makePositioned(this.element); // fix IE … … 278 279 279 280 if(this.options.scroll) { 280 this.originalScrollLeft = this.options.scroll.scrollLeft; 281 this.originalScrollTop = this.options.scroll.scrollTop; 281 if (this.options.scroll.scrollTo) { 282 var where= this._getWindowScroll(this.options.scroll); 283 this.originalScrollLeft = where.left; 284 this.originalScrollTop = where.top; 285 } else { 286 this.originalScrollLeft = this.options.scroll.scrollLeft; 287 this.originalScrollTop = this.options.scroll.scrollTop; 288 } 282 289 } 283 290 … … 295 302 296 303 if(this.options.scroll) { 297 //if(this.scrollInterval) this.scroll();298 304 this.stopScrolling(); 299 var p = Position.page(this.options.scroll); 300 p[0] += this.options.scroll.scrollLeft; 301 p[1] += this.options.scroll.scrollTop; 302 p.push(p[0]+this.options.scroll.offsetWidth); 303 p.push(p[1]+this.options.scroll.offsetHeight); 305 306 var p; 307 if (this.options.scroll.scrollTo) { 308 with(this._getWindowScroll(this.options.scroll)) { p = [ left, top, left+width, top+height ]; } 309 } else { 310 p = Position.page(this.options.scroll); 311 p[0] += this.options.scroll.scrollLeft; 312 p[1] += this.options.scroll.scrollTop; 313 p.push(p[0]+this.options.scroll.offsetWidth); 314 p.push(p[1]+this.options.scroll.offsetHeight); 315 } 304 316 var speed = [0,0]; 305 317 if(pointer[0] < (p[0]+this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[0]+this.options.scrollSensitivity); … … 367 379 pos[0] -= d[0]; pos[1] -= d[1]; 368 380 369 if(this.options.scroll ) {381 if(this.options.scroll && !this.options.scroll.scrollTo) { 370 382 pos[0] -= this.options.scroll.scrollLeft-this.originalScrollLeft; 371 383 pos[1] -= this.options.scroll.scrollTop-this.originalScrollTop; … … 414 426 var delta = current - this.lastScrolled; 415 427 this.lastScrolled = current; 416 this.options.scroll.scrollLeft += this.scrollSpeed[0] * delta / 1000; 417 this.options.scroll.scrollTop += this.scrollSpeed[1] * delta / 1000; 428 if(this.options.scroll.scrollTo) { 429 with (this._getWindowScroll(this.options.scroll)) { 430 if (this.scrollSpeed[0] || this.scrollSpeed[1]) { 431 var d = delta / 1000; 432 this.options.scroll.scrollTo( left + d*this.scrollSpeed[0], top + d*this.scrollSpeed[1] ); 433 } 434 } 435 } else { 436 this.options.scroll.scrollLeft += this.scrollSpeed[0] * delta / 1000; 437 this.options.scroll.scrollTop += this.scrollSpeed[1] * delta / 1000; 438 } 418 439 419 440 Position.prepare(); … … 423 444 424 445 if(this.options.change) this.options.change(this); 446 }, 447 448 _getWindowScroll: function(w) { 449 var T, L, W, H; 450 with (w.document) { 451 if (w.document.documentElement && documentElement.scrollTop) { 452 T = documentElement.scrollTop; 453 L = documentElement.scrollLeft; 454 } else if (w.document.body) { 455 T = body.scrollTop; 456 L = body.scrollLeft; 457 } 458 if (w.innerWidth) { 459 W = w.innerWidth; 460 H = w.innerHeight; 461 } else if (w.document.documentElement && documentElement.clientWidth) { 462 W = documentElement.clientWidth; 463 H = documentElement.clientHeight; 464 } else { 465 W = body.offsetWidth; 466 H = body.offsetHeight 467 } 468 } 469 return { top: T, left: L, width: W, height: H }; 425 470 } 426 471 } spinoffs/scriptaculous/test/functional/dragdrop2_test.html
r2948 r4011 33 33 <script type="text/javascript" language="javascript" charset="utf-8"> 34 34 // <![CDATA[ 35 new Draggable('revertbox1',{ handle:'handle1',revert:function(element){return ($('shouldrevert1').checked)}});35 new Draggable('revertbox1',{scroll:window,handle:'handle1',revert:function(element){return ($('shouldrevert1').checked)}}); 36 36 new Draggable('revertbox2',{handle:'handle2',revert:function(element){return ($('shouldrevert2').checked)}}); 37 37 Droppables.add('droptarget1',{accept:['box1','otherstuff'],onDrop:function(){alert('drop!')}});