PageSourceSearch

https://www.monoplex.com/js/dragscrollable.js

js monoplex.com collected 2026-10-09 22:24:07 UTC 4,625 bytes, 123 lines download raw bytes

1/*
2 * jQuery dragscrollable Plugin
3 * version: 1.0 (25-Jun-2009)
4 * Copyright (c) 2009 Miquel Herrera
5 *
6 * Dual licensed under the MIT and GPL licenses:
7 *   http://www.opensource.org/licenses/mit-license.php
8 *   http://www.gnu.org/licenses/gpl.html
9 *
10 */
11;(function($){ // secure $ jQuery alias
12
13/**
14 * Adds the ability to manage elements scroll by dragging
15 * one or more of its descendant elements. Options parameter
16 * allow to specifically select which inner elements will
17 * respond to the drag events.
18 *
19 * options properties:
20 * ------------------------------------------------------------------------
21 *  dragSelector         | jquery selector to apply to each wrapped element
22 *                       | to find which will be the dragging elements.
23 *                       | Defaults to '>:first' which is the first child of
24 *                       | scrollable element
25 * ------------------------------------------------------------------------
26 *  acceptPropagatedEvent| Will the dragging element accept propagated
27 *	                     | events? default is yes, a propagated mouse event
28 *	                     | on a inner element will be accepted and processed.
29 *	                     | If set to false, only events originated on the
30 *	                     | draggable elements will be processed.
31 * ------------------------------------------------------------------------
32 *  preventDefault       | Prevents the event to propagate further effectivey
33 *                       | dissabling other default actions. Defaults to true
34 * ------------------------------------------------------------------------
35 *
36 *  usage examples:
37 *
38 *  To add the scroll by drag to the element id=viewport when dragging its
39 *  first child accepting any propagated events
40 *	$('#viewport').dragscrollable();
41 *
42 *  To add the scroll by drag ability to any element div of class viewport
43 *  when dragging its first descendant of class dragMe responding only to
44 *  evcents originated on the '.dragMe' elements.
45 *	$('div.viewport').dragscrollable({dragSelector:'.dragMe:first',
46 *									  acceptPropagatedEvent: false});
47 *
48 *  Notice that some 'viewports' could be nested within others but events
49 *  would not interfere as acceptPropagatedEvent is set to false.
50 *
51 */
52$.fn.dragscrollable = function( options ){
53
54	var settings = $.extend(
55		{
56			dragSelector:'>:first',
57			acceptPropagatedEvent: true,
58            preventDefault: true
59		},options || {});
60
61
62	var dragscroll= {
63		mouseDownHandler : function(event) {
64			// mousedown, left click, check propagation
65			if (event.which!=1 ||
66				(!event.data.acceptPropagatedEvent && event.target != this)){
67				return false;
68			}
69
70			// Initial coordinates will be the last when dragging
71			event.data.lastCoord = {left: event.clientX, top: event.clientY};
72
73			$.event.add( document, "mouseup",
74						 dragscroll.mouseUpHandler, event.data );
75			$.event.add( document, "mousemove",
76						 dragscroll.mouseMoveHandler, event.data );
77			if (event.data.preventDefault) {
78                event.preventDefault();
79                return false;
80            }
81		},
82		mouseMoveHandler : function(event) { // User is dragging
83			// How much did the mouse move?
84			var delta = {left: (event.clientX - event.data.lastCoord.left),
85						 top: (event.clientY - event.data.lastCoord.top)};
86
87			// Set the scroll position relative to what ever the scroll is now
88			event.data.scrollable.scrollLeft(
89							event.data.scrollable.scrollLeft() - delta.left);
90			event.data.scrollable.scrollTop(
91							event.data.scrollable.scrollTop() - delta.top);
92
93			// Save where the cursor is
94			event.data.lastCoord={left: event.clientX, top: event.clientY}
95			if (event.data.preventDefault) {
96                event.preventDefault();
97                return false;
98            }
99
100		},
101		mouseUpHandler : function(event) { // Stop scrolling
102			$.event.remove( document, "mousemove", dragscroll.mouseMoveHandler);
103			$.event.remove( document, "mouseup", dragscroll.mouseUpHandler);
104			if (event.data.preventDefault) {
105                event.preventDefault();
106                return false;
107            }
108		}
109	}
110
111	// set up the initial events
112	this.each(function() {
113		// closure object data for each scrollable element
114		var data = {scrollable : $(this),
115					acceptPropagatedEvent : settings.acceptPropagatedEvent,
116                    preventDefault : settings.preventDefault }
117		// Set mouse initiating event on the desired descendant
118		$(this).find(settings.dragSelector).
119						bind('mousedown', data, dragscroll.mouseDownHandler);
120	});
121}; //end plugin dragscrollable
122
123})( jQuery ); // confine scope

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.