Repository files navigation

Big Surface is Limitless Space Within DOM Elements

Big Surface frees DOM elements from the shackles of scroll bars. WIth Big Surface, users are free to move through the space inside the element with their mouse pointer or via touch gestures. Developers (you) can place elements anywhere in side the element, whether it's top:100px; left:-300px; or top:-47474px; left:348949px;. Big Surface uses CSS3 transforms and hardware acceleration for smooth movement within the limitless plane.

Use

For plain JavaScript applications, use the dist/big-surface.js, which will inject the BigSurface object to the global scope. You can also use the file as a AMD or CommonJS module.

API

In the API BigSurface (capitalized) refers to the module object and bigSurface (lowercase) refers to a BigSurface instance which is created via BigSurface.create. Any parameter starting with opt_ is optional.

BigSurface.create(container)

Constructor function which returns a new BigSurface instance. The container is the element which will contain the BigSurface.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document body

bigSurface.speed(target, opt_duration, opt_easingFunc, opt_callback)

Sets the per-step movement speed limit in pixels for the bigSurface. For example, if target is "10", then at most the user will be able to move 10 pixels per frame (assuming 60 frames/second). If a duration is given, the speed will tween from the current value to the target value using an easing function (quadratic by default). If a callback function is given, it will be called after the given duration.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.speed(8,2);// Take 2 seconds to speed up to 8 pixels per frame in 2 second, this will trigger 'move start'setTimeout(function(){bigSurface.speed(0,10);// Take 10 seconds to come to a stop, after which the 'move stop' will fire},2000);

bigSurface.horizontalSpeed(target, opt_duration, opt_easingFunc, opt_callback)

Same as bigSurface.speed but only for horizontal movement.

bigSurface.verticalSpeed(target, opt_duration, opt_easingFunc, opt_callback)

Same as bigSurface.speed but only for vertical movement.

bigSurface.on(eventName, callback)

Allows for binding callbacks to the following events:

  • "move start", triggered when a user has the ability to move within the bigSurface.
  • "move stop", triggered when a bigSurface is locked and a user may not move within it.
  • "pointer tracking start", triggered when the tracking of the users' pointer (mouse or touch) begins.
  • "pointer tracking stop", triggered when the tracking of the users' pointer stops.

Just because a move event triggers doesn't mean the bigSurface is moving, it only signals that it's capable of moving if the user interacts with it. Same with pointer tracking -- the pointer can be tracked even while the bigSurface is locked so that when it's unlocked, it can react accordingly to the last known position of the users pointer.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.on('move start',function(){console.log("The user is free to move within the bigSurface!");})

bigSurface.removeListener(eventName, callback)

Detaches an event listener which was previously bound using bigSurface.on.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.on('move start',moveStartHandler);// bind a handlerbigSurface.removeListener('move start',moveStartHandler);// undo the previous line of code

bigSurface.element

The "infinite" bigSurface element which you can append absolutely positioned elements to.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.appendChild(myElement);// Attach an element to the bigSurface (should be absolutely positioned)

bigSurface.container

The element containing the bigSurface element. This is essentially the "window" at which the user sees the bigSurface through.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.container===document.body;// true

bigSurface.css(name, opt_value, opt_duration)

Modifies a CSS property of the bigSurface element (sets the style named name to value). If a opt_duration is given, a CSS transition will occur between the current value and the given value. If no value is given, this returns the current value of the style.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.css('opacity',0,10);// take 10 seconds to fade out the bigSurface

bigSurface.cssTransform(name, opt_value, opt_duration)

Modifies a CSS3 transform property of the bigSurface element (sets the style named name to value). If a opt_duration is given, a CSS transition will occur between the current value and the given value. If no value is given, this returns the current value of the transform.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.cssTransform('rotate','10deg');// rotate the bigSurface 10deg immediately

bigSurface.cssFilter(name, opt_value, opt_duration)

Modifies a CSS3 filter property of the bigSurface element (sets the style named name to value). If a opt_duration is given, a CSS transition will occur between the current value and the given value. If no value is given, this returns the current value of the filter.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.cssFilter('blur','100px',20);// Take 20 seconds to blur the bigSurface at 100px

bigSurface.cssTransition(name, opt_value)

Modifies a CSS3 transition property of the bigSurface element (sets the style named name to value). If no value is given, this returns the current value of the transition.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.cssFilter('opacity','100');// Set the transition time of opacity changes to 100 seconds

bigSurface.horizontalWind(target, opt_duration, opt_easingFunc, opt_callback)

Sets the base horizontal movement of the bigSurface. For example, if target is "-10", the bigSurface will move towards the left 10 pixels per frame. If a duration is given, the speed will tween from the current value to the target value using an easing function (quadratic by default). If a callback function is given, it will be called after the given duration.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.horizontalWind(5);// Move the bigSurface 5px to the right every frame

bigSurface.verticalWind(target, opt_duration, opt_easingFunc, opt_callback)

Same as the horizontal wind, except for vertical movement.

bigSurface.speedGradient

This is the function which tells the bigSurface to slow movement when the pointer is near the center of the bigSurface and to speed up when it's near the edges. Use this to set or get the gradient funtion used to determine the speed of movement relative to the user's pointer positions relative to the bigSurface. The gradient is quadratic in by default. The gradient must have the following function signature: speedGradient(currentPointerPosition, 0, 1 or -1 (depending on direction), halfWidth or halfHeight) it must return a value between -1 and 1 which will be used as a multiplier against the bigSurface speed limit.

bigSurface.horizontalSpeedGradient

For getting/setting just the horizontal speed gradient.

bigSurface.verticalSpeedGradient

For getting/setting just the horizontal speed gradient.

bigSurface.width

Retrieves the current bigSurface width.

bigSurface.height

Retrieves the current bigSurface height.

bigSurface.top

Retrieves the current bigSurface top.

bigSurface.left

Retrieves the current bigSurface left.

Developing

This project uses boilerplate-gulp. Run 'gulp dev' to develop and have incremental builds, continuous testing, etc. Run 'gulp' to run regenerate the dist files.

About

Limitless space within DOM elements

Resources

Stars

19 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Big Surface is Limitless Space Within DOM Elements

Big Surface frees DOM elements from the shackles of scroll bars. WIth Big Surface, users are free to move through the space inside the element with their mouse pointer or via touch gestures. Developers (you) can place elements anywhere in side the element, whether it's top:100px; left:-300px; or top:-47474px; left:348949px;. Big Surface uses CSS3 transforms and hardware acceleration for smooth movement within the limitless plane.

Use

For plain JavaScript applications, use the dist/big-surface.js, which will inject the BigSurface object to the global scope. You can also use the file as a AMD or CommonJS module.

API

In the API BigSurface (capitalized) refers to the module object and bigSurface (lowercase) refers to a BigSurface instance which is created via BigSurface.create. Any parameter starting with opt_ is optional.

BigSurface.create(container)

Constructor function which returns a new BigSurface instance. The container is the element which will contain the BigSurface.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document body

bigSurface.speed(target, opt_duration, opt_easingFunc, opt_callback)

Sets the per-step movement speed limit in pixels for the bigSurface. For example, if target is "10", then at most the user will be able to move 10 pixels per frame (assuming 60 frames/second). If a duration is given, the speed will tween from the current value to the target value using an easing function (quadratic by default). If a callback function is given, it will be called after the given duration.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.speed(8,2);// Take 2 seconds to speed up to 8 pixels per frame in 2 second, this will trigger 'move start'setTimeout(function(){bigSurface.speed(0,10);// Take 10 seconds to come to a stop, after which the 'move stop' will fire},2000);

bigSurface.horizontalSpeed(target, opt_duration, opt_easingFunc, opt_callback)

Same as bigSurface.speed but only for horizontal movement.

bigSurface.verticalSpeed(target, opt_duration, opt_easingFunc, opt_callback)

Same as bigSurface.speed but only for vertical movement.

bigSurface.on(eventName, callback)

Allows for binding callbacks to the following events:

  • "move start", triggered when a user has the ability to move within the bigSurface.
  • "move stop", triggered when a bigSurface is locked and a user may not move within it.
  • "pointer tracking start", triggered when the tracking of the users' pointer (mouse or touch) begins.
  • "pointer tracking stop", triggered when the tracking of the users' pointer stops.

Just because a move event triggers doesn't mean the bigSurface is moving, it only signals that it's capable of moving if the user interacts with it. Same with pointer tracking -- the pointer can be tracked even while the bigSurface is locked so that when it's unlocked, it can react accordingly to the last known position of the users pointer.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.on('move start',function(){console.log("The user is free to move within the bigSurface!");})

bigSurface.removeListener(eventName, callback)

Detaches an event listener which was previously bound using bigSurface.on.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.on('move start',moveStartHandler);// bind a handlerbigSurface.removeListener('move start',moveStartHandler);// undo the previous line of code

bigSurface.element

The "infinite" bigSurface element which you can append absolutely positioned elements to.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.appendChild(myElement);// Attach an element to the bigSurface (should be absolutely positioned)

bigSurface.container

The element containing the bigSurface element. This is essentially the "window" at which the user sees the bigSurface through.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.container===document.body;// true

bigSurface.css(name, opt_value, opt_duration)

Modifies a CSS property of the bigSurface element (sets the style named name to value). If a opt_duration is given, a CSS transition will occur between the current value and the given value. If no value is given, this returns the current value of the style.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.css('opacity',0,10);// take 10 seconds to fade out the bigSurface

bigSurface.cssTransform(name, opt_value, opt_duration)

Modifies a CSS3 transform property of the bigSurface element (sets the style named name to value). If a opt_duration is given, a CSS transition will occur between the current value and the given value. If no value is given, this returns the current value of the transform.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.cssTransform('rotate','10deg');// rotate the bigSurface 10deg immediately

bigSurface.cssFilter(name, opt_value, opt_duration)

Modifies a CSS3 filter property of the bigSurface element (sets the style named name to value). If a opt_duration is given, a CSS transition will occur between the current value and the given value. If no value is given, this returns the current value of the filter.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.cssFilter('blur','100px',20);// Take 20 seconds to blur the bigSurface at 100px

bigSurface.cssTransition(name, opt_value)

Modifies a CSS3 transition property of the bigSurface element (sets the style named name to value). If no value is given, this returns the current value of the transition.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.cssFilter('opacity','100');// Set the transition time of opacity changes to 100 seconds

bigSurface.horizontalWind(target, opt_duration, opt_easingFunc, opt_callback)

Sets the base horizontal movement of the bigSurface. For example, if target is "-10", the bigSurface will move towards the left 10 pixels per frame. If a duration is given, the speed will tween from the current value to the target value using an easing function (quadratic by default). If a callback function is given, it will be called after the given duration.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.horizontalWind(5);// Move the bigSurface 5px to the right every frame

bigSurface.verticalWind(target, opt_duration, opt_easingFunc, opt_callback)

Same as the horizontal wind, except for vertical movement.

bigSurface.speedGradient

This is the function which tells the bigSurface to slow movement when the pointer is near the center of the bigSurface and to speed up when it's near the edges. Use this to set or get the gradient funtion used to determine the speed of movement relative to the user's pointer positions relative to the bigSurface. The gradient is quadratic in by default. The gradient must have the following function signature: speedGradient(currentPointerPosition, 0, 1 or -1 (depending on direction), halfWidth or halfHeight) it must return a value between -1 and 1 which will be used as a multiplier against the bigSurface speed limit.

bigSurface.horizontalSpeedGradient

For getting/setting just the horizontal speed gradient.

bigSurface.verticalSpeedGradient

For getting/setting just the horizontal speed gradient.

bigSurface.width

Retrieves the current bigSurface width.

bigSurface.height

Retrieves the current bigSurface height.

bigSurface.top

Retrieves the current bigSurface top.

bigSurface.left

Retrieves the current bigSurface left.

Developing

This project uses boilerplate-gulp. Run 'gulp dev' to develop and have incremental builds, continuous testing, etc. Run 'gulp' to run regenerate the dist files.

About

Limitless space within DOM elements

Resources

Stars

19 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Big Surface is Limitless Space Within DOM Elements

Big Surface frees DOM elements from the shackles of scroll bars. WIth Big Surface, users are free to move through the space inside the element with their mouse pointer or via touch gestures. Developers (you) can place elements anywhere in side the element, whether it's top:100px; left:-300px; or top:-47474px; left:348949px;. Big Surface uses CSS3 transforms and hardware acceleration for smooth movement within the limitless plane.

Use

For plain JavaScript applications, use the dist/big-surface.js, which will inject the BigSurface object to the global scope. You can also use the file as a AMD or CommonJS module.

API

In the API BigSurface (capitalized) refers to the module object and bigSurface (lowercase) refers to a BigSurface instance which is created via BigSurface.create. Any parameter starting with opt_ is optional.

BigSurface.create(container)

Constructor function which returns a new BigSurface instance. The container is the element which will contain the BigSurface.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document body

bigSurface.speed(target, opt_duration, opt_easingFunc, opt_callback)

Sets the per-step movement speed limit in pixels for the bigSurface. For example, if target is "10", then at most the user will be able to move 10 pixels per frame (assuming 60 frames/second). If a duration is given, the speed will tween from the current value to the target value using an easing function (quadratic by default). If a callback function is given, it will be called after the given duration.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.speed(8,2);// Take 2 seconds to speed up to 8 pixels per frame in 2 second, this will trigger 'move start'setTimeout(function(){bigSurface.speed(0,10);// Take 10 seconds to come to a stop, after which the 'move stop' will fire},2000);

bigSurface.horizontalSpeed(target, opt_duration, opt_easingFunc, opt_callback)

Same as bigSurface.speed but only for horizontal movement.

bigSurface.verticalSpeed(target, opt_duration, opt_easingFunc, opt_callback)

Same as bigSurface.speed but only for vertical movement.

bigSurface.on(eventName, callback)

Allows for binding callbacks to the following events:

  • "move start", triggered when a user has the ability to move within the bigSurface.
  • "move stop", triggered when a bigSurface is locked and a user may not move within it.
  • "pointer tracking start", triggered when the tracking of the users' pointer (mouse or touch) begins.
  • "pointer tracking stop", triggered when the tracking of the users' pointer stops.

Just because a move event triggers doesn't mean the bigSurface is moving, it only signals that it's capable of moving if the user interacts with it. Same with pointer tracking -- the pointer can be tracked even while the bigSurface is locked so that when it's unlocked, it can react accordingly to the last known position of the users pointer.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.on('move start',function(){console.log("The user is free to move within the bigSurface!");})

bigSurface.removeListener(eventName, callback)

Detaches an event listener which was previously bound using bigSurface.on.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.on('move start',moveStartHandler);// bind a handlerbigSurface.removeListener('move start',moveStartHandler);// undo the previous line of code

bigSurface.element

The "infinite" bigSurface element which you can append absolutely positioned elements to.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.appendChild(myElement);// Attach an element to the bigSurface (should be absolutely positioned)

bigSurface.container

The element containing the bigSurface element. This is essentially the "window" at which the user sees the bigSurface through.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.container===document.body;// true

bigSurface.css(name, opt_value, opt_duration)

Modifies a CSS property of the bigSurface element (sets the style named name to value). If a opt_duration is given, a CSS transition will occur between the current value and the given value. If no value is given, this returns the current value of the style.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.css('opacity',0,10);// take 10 seconds to fade out the bigSurface

bigSurface.cssTransform(name, opt_value, opt_duration)

Modifies a CSS3 transform property of the bigSurface element (sets the style named name to value). If a opt_duration is given, a CSS transition will occur between the current value and the given value. If no value is given, this returns the current value of the transform.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.cssTransform('rotate','10deg');// rotate the bigSurface 10deg immediately

bigSurface.cssFilter(name, opt_value, opt_duration)

Modifies a CSS3 filter property of the bigSurface element (sets the style named name to value). If a opt_duration is given, a CSS transition will occur between the current value and the given value. If no value is given, this returns the current value of the filter.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.cssFilter('blur','100px',20);// Take 20 seconds to blur the bigSurface at 100px

bigSurface.cssTransition(name, opt_value)

Modifies a CSS3 transition property of the bigSurface element (sets the style named name to value). If no value is given, this returns the current value of the transition.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.cssFilter('opacity','100');// Set the transition time of opacity changes to 100 seconds

bigSurface.horizontalWind(target, opt_duration, opt_easingFunc, opt_callback)

Sets the base horizontal movement of the bigSurface. For example, if target is "-10", the bigSurface will move towards the left 10 pixels per frame. If a duration is given, the speed will tween from the current value to the target value using an easing function (quadratic by default). If a callback function is given, it will be called after the given duration.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.horizontalWind(5);// Move the bigSurface 5px to the right every frame

bigSurface.verticalWind(target, opt_duration, opt_easingFunc, opt_callback)

Same as the horizontal wind, except for vertical movement.

bigSurface.speedGradient

This is the function which tells the bigSurface to slow movement when the pointer is near the center of the bigSurface and to speed up when it's near the edges. Use this to set or get the gradient funtion used to determine the speed of movement relative to the user's pointer positions relative to the bigSurface. The gradient is quadratic in by default. The gradient must have the following function signature: speedGradient(currentPointerPosition, 0, 1 or -1 (depending on direction), halfWidth or halfHeight) it must return a value between -1 and 1 which will be used as a multiplier against the bigSurface speed limit.

bigSurface.horizontalSpeedGradient

For getting/setting just the horizontal speed gradient.

bigSurface.verticalSpeedGradient

For getting/setting just the horizontal speed gradient.

bigSurface.width

Retrieves the current bigSurface width.

bigSurface.height

Retrieves the current bigSurface height.

bigSurface.top

Retrieves the current bigSurface top.

bigSurface.left

Retrieves the current bigSurface left.

Developing

This project uses boilerplate-gulp. Run 'gulp dev' to develop and have incremental builds, continuous testing, etc. Run 'gulp' to run regenerate the dist files.

About

Limitless space within DOM elements

Resources

Stars

19 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Big Surface is Limitless Space Within DOM Elements

Big Surface frees DOM elements from the shackles of scroll bars. WIth Big Surface, users are free to move through the space inside the element with their mouse pointer or via touch gestures. Developers (you) can place elements anywhere in side the element, whether it's top:100px; left:-300px; or top:-47474px; left:348949px;. Big Surface uses CSS3 transforms and hardware acceleration for smooth movement within the limitless plane.

Use

For plain JavaScript applications, use the dist/big-surface.js, which will inject the BigSurface object to the global scope. You can also use the file as a AMD or CommonJS module.

API

In the API BigSurface (capitalized) refers to the module object and bigSurface (lowercase) refers to a BigSurface instance which is created via BigSurface.create. Any parameter starting with opt_ is optional.

BigSurface.create(container)

Constructor function which returns a new BigSurface instance. The container is the element which will contain the BigSurface.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document body

bigSurface.speed(target, opt_duration, opt_easingFunc, opt_callback)

Sets the per-step movement speed limit in pixels for the bigSurface. For example, if target is "10", then at most the user will be able to move 10 pixels per frame (assuming 60 frames/second). If a duration is given, the speed will tween from the current value to the target value using an easing function (quadratic by default). If a callback function is given, it will be called after the given duration.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.speed(8,2);// Take 2 seconds to speed up to 8 pixels per frame in 2 second, this will trigger 'move start'setTimeout(function(){bigSurface.speed(0,10);// Take 10 seconds to come to a stop, after which the 'move stop' will fire},2000);

bigSurface.horizontalSpeed(target, opt_duration, opt_easingFunc, opt_callback)

Same as bigSurface.speed but only for horizontal movement.

bigSurface.verticalSpeed(target, opt_duration, opt_easingFunc, opt_callback)

Same as bigSurface.speed but only for vertical movement.

bigSurface.on(eventName, callback)

Allows for binding callbacks to the following events:

  • "move start", triggered when a user has the ability to move within the bigSurface.
  • "move stop", triggered when a bigSurface is locked and a user may not move within it.
  • "pointer tracking start", triggered when the tracking of the users' pointer (mouse or touch) begins.
  • "pointer tracking stop", triggered when the tracking of the users' pointer stops.

Just because a move event triggers doesn't mean the bigSurface is moving, it only signals that it's capable of moving if the user interacts with it. Same with pointer tracking -- the pointer can be tracked even while the bigSurface is locked so that when it's unlocked, it can react accordingly to the last known position of the users pointer.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.on('move start',function(){console.log("The user is free to move within the bigSurface!");})

bigSurface.removeListener(eventName, callback)

Detaches an event listener which was previously bound using bigSurface.on.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.on('move start',moveStartHandler);// bind a handlerbigSurface.removeListener('move start',moveStartHandler);// undo the previous line of code

bigSurface.element

The "infinite" bigSurface element which you can append absolutely positioned elements to.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.appendChild(myElement);// Attach an element to the bigSurface (should be absolutely positioned)

bigSurface.container

The element containing the bigSurface element. This is essentially the "window" at which the user sees the bigSurface through.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.container===document.body;// true

bigSurface.css(name, opt_value, opt_duration)

Modifies a CSS property of the bigSurface element (sets the style named name to value). If a opt_duration is given, a CSS transition will occur between the current value and the given value. If no value is given, this returns the current value of the style.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.css('opacity',0,10);// take 10 seconds to fade out the bigSurface

bigSurface.cssTransform(name, opt_value, opt_duration)

Modifies a CSS3 transform property of the bigSurface element (sets the style named name to value). If a opt_duration is given, a CSS transition will occur between the current value and the given value. If no value is given, this returns the current value of the transform.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.cssTransform('rotate','10deg');// rotate the bigSurface 10deg immediately

bigSurface.cssFilter(name, opt_value, opt_duration)

Modifies a CSS3 filter property of the bigSurface element (sets the style named name to value). If a opt_duration is given, a CSS transition will occur between the current value and the given value. If no value is given, this returns the current value of the filter.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.cssFilter('blur','100px',20);// Take 20 seconds to blur the bigSurface at 100px

bigSurface.cssTransition(name, opt_value)

Modifies a CSS3 transition property of the bigSurface element (sets the style named name to value). If no value is given, this returns the current value of the transition.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.cssFilter('opacity','100');// Set the transition time of opacity changes to 100 seconds

bigSurface.horizontalWind(target, opt_duration, opt_easingFunc, opt_callback)

Sets the base horizontal movement of the bigSurface. For example, if target is "-10", the bigSurface will move towards the left 10 pixels per frame. If a duration is given, the speed will tween from the current value to the target value using an easing function (quadratic by default). If a callback function is given, it will be called after the given duration.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.horizontalWind(5);// Move the bigSurface 5px to the right every frame

bigSurface.verticalWind(target, opt_duration, opt_easingFunc, opt_callback)

Same as the horizontal wind, except for vertical movement.

bigSurface.speedGradient

This is the function which tells the bigSurface to slow movement when the pointer is near the center of the bigSurface and to speed up when it's near the edges. Use this to set or get the gradient funtion used to determine the speed of movement relative to the user's pointer positions relative to the bigSurface. The gradient is quadratic in by default. The gradient must have the following function signature: speedGradient(currentPointerPosition, 0, 1 or -1 (depending on direction), halfWidth or halfHeight) it must return a value between -1 and 1 which will be used as a multiplier against the bigSurface speed limit.

bigSurface.horizontalSpeedGradient

For getting/setting just the horizontal speed gradient.

bigSurface.verticalSpeedGradient

For getting/setting just the horizontal speed gradient.

bigSurface.width

Retrieves the current bigSurface width.

bigSurface.height

Retrieves the current bigSurface height.

bigSurface.top

Retrieves the current bigSurface top.

bigSurface.left

Retrieves the current bigSurface left.

Developing

This project uses boilerplate-gulp. Run 'gulp dev' to develop and have incremental builds, continuous testing, etc. Run 'gulp' to run regenerate the dist files.

About

Limitless space within DOM elements

Resources

Stars

19 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Big Surface is Limitless Space Within DOM Elements

Big Surface frees DOM elements from the shackles of scroll bars. WIth Big Surface, users are free to move through the space inside the element with their mouse pointer or via touch gestures. Developers (you) can place elements anywhere in side the element, whether it's top:100px; left:-300px; or top:-47474px; left:348949px;. Big Surface uses CSS3 transforms and hardware acceleration for smooth movement within the limitless plane.

Use

For plain JavaScript applications, use the dist/big-surface.js, which will inject the BigSurface object to the global scope. You can also use the file as a AMD or CommonJS module.

API

In the API BigSurface (capitalized) refers to the module object and bigSurface (lowercase) refers to a BigSurface instance which is created via BigSurface.create. Any parameter starting with opt_ is optional.

BigSurface.create(container)

Constructor function which returns a new BigSurface instance. The container is the element which will contain the BigSurface.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document body

bigSurface.speed(target, opt_duration, opt_easingFunc, opt_callback)

Sets the per-step movement speed limit in pixels for the bigSurface. For example, if target is "10", then at most the user will be able to move 10 pixels per frame (assuming 60 frames/second). If a duration is given, the speed will tween from the current value to the target value using an easing function (quadratic by default). If a callback function is given, it will be called after the given duration.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.speed(8,2);// Take 2 seconds to speed up to 8 pixels per frame in 2 second, this will trigger 'move start'setTimeout(function(){bigSurface.speed(0,10);// Take 10 seconds to come to a stop, after which the 'move stop' will fire},2000);

bigSurface.horizontalSpeed(target, opt_duration, opt_easingFunc, opt_callback)

Same as bigSurface.speed but only for horizontal movement.

bigSurface.verticalSpeed(target, opt_duration, opt_easingFunc, opt_callback)

Same as bigSurface.speed but only for vertical movement.

bigSurface.on(eventName, callback)

Allows for binding callbacks to the following events:

  • "move start", triggered when a user has the ability to move within the bigSurface.
  • "move stop", triggered when a bigSurface is locked and a user may not move within it.
  • "pointer tracking start", triggered when the tracking of the users' pointer (mouse or touch) begins.
  • "pointer tracking stop", triggered when the tracking of the users' pointer stops.

Just because a move event triggers doesn't mean the bigSurface is moving, it only signals that it's capable of moving if the user interacts with it. Same with pointer tracking -- the pointer can be tracked even while the bigSurface is locked so that when it's unlocked, it can react accordingly to the last known position of the users pointer.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.on('move start',function(){console.log("The user is free to move within the bigSurface!");})

bigSurface.removeListener(eventName, callback)

Detaches an event listener which was previously bound using bigSurface.on.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.on('move start',moveStartHandler);// bind a handlerbigSurface.removeListener('move start',moveStartHandler);// undo the previous line of code

bigSurface.element

The "infinite" bigSurface element which you can append absolutely positioned elements to.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.appendChild(myElement);// Attach an element to the bigSurface (should be absolutely positioned)

bigSurface.container

The element containing the bigSurface element. This is essentially the "window" at which the user sees the bigSurface through.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.container===document.body;// true

bigSurface.css(name, opt_value, opt_duration)

Modifies a CSS property of the bigSurface element (sets the style named name to value). If a opt_duration is given, a CSS transition will occur between the current value and the given value. If no value is given, this returns the current value of the style.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.css('opacity',0,10);// take 10 seconds to fade out the bigSurface

bigSurface.cssTransform(name, opt_value, opt_duration)

Modifies a CSS3 transform property of the bigSurface element (sets the style named name to value). If a opt_duration is given, a CSS transition will occur between the current value and the given value. If no value is given, this returns the current value of the transform.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.cssTransform('rotate','10deg');// rotate the bigSurface 10deg immediately

bigSurface.cssFilter(name, opt_value, opt_duration)

Modifies a CSS3 filter property of the bigSurface element (sets the style named name to value). If a opt_duration is given, a CSS transition will occur between the current value and the given value. If no value is given, this returns the current value of the filter.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.cssFilter('blur','100px',20);// Take 20 seconds to blur the bigSurface at 100px

bigSurface.cssTransition(name, opt_value)

Modifies a CSS3 transition property of the bigSurface element (sets the style named name to value). If no value is given, this returns the current value of the transition.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.cssFilter('opacity','100');// Set the transition time of opacity changes to 100 seconds

bigSurface.horizontalWind(target, opt_duration, opt_easingFunc, opt_callback)

Sets the base horizontal movement of the bigSurface. For example, if target is "-10", the bigSurface will move towards the left 10 pixels per frame. If a duration is given, the speed will tween from the current value to the target value using an easing function (quadratic by default). If a callback function is given, it will be called after the given duration.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.horizontalWind(5);// Move the bigSurface 5px to the right every frame

bigSurface.verticalWind(target, opt_duration, opt_easingFunc, opt_callback)

Same as the horizontal wind, except for vertical movement.

bigSurface.speedGradient

This is the function which tells the bigSurface to slow movement when the pointer is near the center of the bigSurface and to speed up when it's near the edges. Use this to set or get the gradient funtion used to determine the speed of movement relative to the user's pointer positions relative to the bigSurface. The gradient is quadratic in by default. The gradient must have the following function signature: speedGradient(currentPointerPosition, 0, 1 or -1 (depending on direction), halfWidth or halfHeight) it must return a value between -1 and 1 which will be used as a multiplier against the bigSurface speed limit.

bigSurface.horizontalSpeedGradient

For getting/setting just the horizontal speed gradient.

bigSurface.verticalSpeedGradient

For getting/setting just the horizontal speed gradient.

bigSurface.width

Retrieves the current bigSurface width.

bigSurface.height

Retrieves the current bigSurface height.

bigSurface.top

Retrieves the current bigSurface top.

bigSurface.left

Retrieves the current bigSurface left.

Developing

This project uses boilerplate-gulp. Run 'gulp dev' to develop and have incremental builds, continuous testing, etc. Run 'gulp' to run regenerate the dist files.

About

Limitless space within DOM elements

Resources

Stars

19 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Big Surface is Limitless Space Within DOM Elements

Big Surface frees DOM elements from the shackles of scroll bars. WIth Big Surface, users are free to move through the space inside the element with their mouse pointer or via touch gestures. Developers (you) can place elements anywhere in side the element, whether it's top:100px; left:-300px; or top:-47474px; left:348949px;. Big Surface uses CSS3 transforms and hardware acceleration for smooth movement within the limitless plane.

Use

For plain JavaScript applications, use the dist/big-surface.js, which will inject the BigSurface object to the global scope. You can also use the file as a AMD or CommonJS module.

API

In the API BigSurface (capitalized) refers to the module object and bigSurface (lowercase) refers to a BigSurface instance which is created via BigSurface.create. Any parameter starting with opt_ is optional.

BigSurface.create(container)

Constructor function which returns a new BigSurface instance. The container is the element which will contain the BigSurface.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document body

bigSurface.speed(target, opt_duration, opt_easingFunc, opt_callback)

Sets the per-step movement speed limit in pixels for the bigSurface. For example, if target is "10", then at most the user will be able to move 10 pixels per frame (assuming 60 frames/second). If a duration is given, the speed will tween from the current value to the target value using an easing function (quadratic by default). If a callback function is given, it will be called after the given duration.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.speed(8,2);// Take 2 seconds to speed up to 8 pixels per frame in 2 second, this will trigger 'move start'setTimeout(function(){bigSurface.speed(0,10);// Take 10 seconds to come to a stop, after which the 'move stop' will fire},2000);

bigSurface.horizontalSpeed(target, opt_duration, opt_easingFunc, opt_callback)

Same as bigSurface.speed but only for horizontal movement.

bigSurface.verticalSpeed(target, opt_duration, opt_easingFunc, opt_callback)

Same as bigSurface.speed but only for vertical movement.

bigSurface.on(eventName, callback)

Allows for binding callbacks to the following events:

  • "move start", triggered when a user has the ability to move within the bigSurface.
  • "move stop", triggered when a bigSurface is locked and a user may not move within it.
  • "pointer tracking start", triggered when the tracking of the users' pointer (mouse or touch) begins.
  • "pointer tracking stop", triggered when the tracking of the users' pointer stops.

Just because a move event triggers doesn't mean the bigSurface is moving, it only signals that it's capable of moving if the user interacts with it. Same with pointer tracking -- the pointer can be tracked even while the bigSurface is locked so that when it's unlocked, it can react accordingly to the last known position of the users pointer.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.on('move start',function(){console.log("The user is free to move within the bigSurface!");})

bigSurface.removeListener(eventName, callback)

Detaches an event listener which was previously bound using bigSurface.on.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.on('move start',moveStartHandler);// bind a handlerbigSurface.removeListener('move start',moveStartHandler);// undo the previous line of code

bigSurface.element

The "infinite" bigSurface element which you can append absolutely positioned elements to.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.appendChild(myElement);// Attach an element to the bigSurface (should be absolutely positioned)

bigSurface.container

The element containing the bigSurface element. This is essentially the "window" at which the user sees the bigSurface through.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.container===document.body;// true

bigSurface.css(name, opt_value, opt_duration)

Modifies a CSS property of the bigSurface element (sets the style named name to value). If a opt_duration is given, a CSS transition will occur between the current value and the given value. If no value is given, this returns the current value of the style.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.css('opacity',0,10);// take 10 seconds to fade out the bigSurface

bigSurface.cssTransform(name, opt_value, opt_duration)

Modifies a CSS3 transform property of the bigSurface element (sets the style named name to value). If a opt_duration is given, a CSS transition will occur between the current value and the given value. If no value is given, this returns the current value of the transform.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.cssTransform('rotate','10deg');// rotate the bigSurface 10deg immediately

bigSurface.cssFilter(name, opt_value, opt_duration)

Modifies a CSS3 filter property of the bigSurface element (sets the style named name to value). If a opt_duration is given, a CSS transition will occur between the current value and the given value. If no value is given, this returns the current value of the filter.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.cssFilter('blur','100px',20);// Take 20 seconds to blur the bigSurface at 100px

bigSurface.cssTransition(name, opt_value)

Modifies a CSS3 transition property of the bigSurface element (sets the style named name to value). If no value is given, this returns the current value of the transition.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.cssFilter('opacity','100');// Set the transition time of opacity changes to 100 seconds

bigSurface.horizontalWind(target, opt_duration, opt_easingFunc, opt_callback)

Sets the base horizontal movement of the bigSurface. For example, if target is "-10", the bigSurface will move towards the left 10 pixels per frame. If a duration is given, the speed will tween from the current value to the target value using an easing function (quadratic by default). If a callback function is given, it will be called after the given duration.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.horizontalWind(5);// Move the bigSurface 5px to the right every frame

bigSurface.verticalWind(target, opt_duration, opt_easingFunc, opt_callback)

Same as the horizontal wind, except for vertical movement.

bigSurface.speedGradient

This is the function which tells the bigSurface to slow movement when the pointer is near the center of the bigSurface and to speed up when it's near the edges. Use this to set or get the gradient funtion used to determine the speed of movement relative to the user's pointer positions relative to the bigSurface. The gradient is quadratic in by default. The gradient must have the following function signature: speedGradient(currentPointerPosition, 0, 1 or -1 (depending on direction), halfWidth or halfHeight) it must return a value between -1 and 1 which will be used as a multiplier against the bigSurface speed limit.

bigSurface.horizontalSpeedGradient

For getting/setting just the horizontal speed gradient.

bigSurface.verticalSpeedGradient

For getting/setting just the horizontal speed gradient.

bigSurface.width

Retrieves the current bigSurface width.

bigSurface.height

Retrieves the current bigSurface height.

bigSurface.top

Retrieves the current bigSurface top.

bigSurface.left

Retrieves the current bigSurface left.

Developing

This project uses boilerplate-gulp. Run 'gulp dev' to develop and have incremental builds, continuous testing, etc. Run 'gulp' to run regenerate the dist files.

About

Limitless space within DOM elements

Resources

Stars

19 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Big Surface is Limitless Space Within DOM Elements

Big Surface frees DOM elements from the shackles of scroll bars. WIth Big Surface, users are free to move through the space inside the element with their mouse pointer or via touch gestures. Developers (you) can place elements anywhere in side the element, whether it's top:100px; left:-300px; or top:-47474px; left:348949px;. Big Surface uses CSS3 transforms and hardware acceleration for smooth movement within the limitless plane.

Use

For plain JavaScript applications, use the dist/big-surface.js, which will inject the BigSurface object to the global scope. You can also use the file as a AMD or CommonJS module.

API

In the API BigSurface (capitalized) refers to the module object and bigSurface (lowercase) refers to a BigSurface instance which is created via BigSurface.create. Any parameter starting with opt_ is optional.

BigSurface.create(container)

Constructor function which returns a new BigSurface instance. The container is the element which will contain the BigSurface.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document body

bigSurface.speed(target, opt_duration, opt_easingFunc, opt_callback)

Sets the per-step movement speed limit in pixels for the bigSurface. For example, if target is "10", then at most the user will be able to move 10 pixels per frame (assuming 60 frames/second). If a duration is given, the speed will tween from the current value to the target value using an easing function (quadratic by default). If a callback function is given, it will be called after the given duration.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.speed(8,2);// Take 2 seconds to speed up to 8 pixels per frame in 2 second, this will trigger 'move start'setTimeout(function(){bigSurface.speed(0,10);// Take 10 seconds to come to a stop, after which the 'move stop' will fire},2000);

bigSurface.horizontalSpeed(target, opt_duration, opt_easingFunc, opt_callback)

Same as bigSurface.speed but only for horizontal movement.

bigSurface.verticalSpeed(target, opt_duration, opt_easingFunc, opt_callback)

Same as bigSurface.speed but only for vertical movement.

bigSurface.on(eventName, callback)

Allows for binding callbacks to the following events:

  • "move start", triggered when a user has the ability to move within the bigSurface.
  • "move stop", triggered when a bigSurface is locked and a user may not move within it.
  • "pointer tracking start", triggered when the tracking of the users' pointer (mouse or touch) begins.
  • "pointer tracking stop", triggered when the tracking of the users' pointer stops.

Just because a move event triggers doesn't mean the bigSurface is moving, it only signals that it's capable of moving if the user interacts with it. Same with pointer tracking -- the pointer can be tracked even while the bigSurface is locked so that when it's unlocked, it can react accordingly to the last known position of the users pointer.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.on('move start',function(){console.log("The user is free to move within the bigSurface!");})

bigSurface.removeListener(eventName, callback)

Detaches an event listener which was previously bound using bigSurface.on.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.on('move start',moveStartHandler);// bind a handlerbigSurface.removeListener('move start',moveStartHandler);// undo the previous line of code

bigSurface.element

The "infinite" bigSurface element which you can append absolutely positioned elements to.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.appendChild(myElement);// Attach an element to the bigSurface (should be absolutely positioned)

bigSurface.container

The element containing the bigSurface element. This is essentially the "window" at which the user sees the bigSurface through.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.container===document.body;// true

bigSurface.css(name, opt_value, opt_duration)

Modifies a CSS property of the bigSurface element (sets the style named name to value). If a opt_duration is given, a CSS transition will occur between the current value and the given value. If no value is given, this returns the current value of the style.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.css('opacity',0,10);// take 10 seconds to fade out the bigSurface

bigSurface.cssTransform(name, opt_value, opt_duration)

Modifies a CSS3 transform property of the bigSurface element (sets the style named name to value). If a opt_duration is given, a CSS transition will occur between the current value and the given value. If no value is given, this returns the current value of the transform.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.cssTransform('rotate','10deg');// rotate the bigSurface 10deg immediately

bigSurface.cssFilter(name, opt_value, opt_duration)

Modifies a CSS3 filter property of the bigSurface element (sets the style named name to value). If a opt_duration is given, a CSS transition will occur between the current value and the given value. If no value is given, this returns the current value of the filter.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.cssFilter('blur','100px',20);// Take 20 seconds to blur the bigSurface at 100px

bigSurface.cssTransition(name, opt_value)

Modifies a CSS3 transition property of the bigSurface element (sets the style named name to value). If no value is given, this returns the current value of the transition.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.cssFilter('opacity','100');// Set the transition time of opacity changes to 100 seconds

bigSurface.horizontalWind(target, opt_duration, opt_easingFunc, opt_callback)

Sets the base horizontal movement of the bigSurface. For example, if target is "-10", the bigSurface will move towards the left 10 pixels per frame. If a duration is given, the speed will tween from the current value to the target value using an easing function (quadratic by default). If a callback function is given, it will be called after the given duration.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.horizontalWind(5);// Move the bigSurface 5px to the right every frame

bigSurface.verticalWind(target, opt_duration, opt_easingFunc, opt_callback)

Same as the horizontal wind, except for vertical movement.

bigSurface.speedGradient

This is the function which tells the bigSurface to slow movement when the pointer is near the center of the bigSurface and to speed up when it's near the edges. Use this to set or get the gradient funtion used to determine the speed of movement relative to the user's pointer positions relative to the bigSurface. The gradient is quadratic in by default. The gradient must have the following function signature: speedGradient(currentPointerPosition, 0, 1 or -1 (depending on direction), halfWidth or halfHeight) it must return a value between -1 and 1 which will be used as a multiplier against the bigSurface speed limit.

bigSurface.horizontalSpeedGradient

For getting/setting just the horizontal speed gradient.

bigSurface.verticalSpeedGradient

For getting/setting just the horizontal speed gradient.

bigSurface.width

Retrieves the current bigSurface width.

bigSurface.height

Retrieves the current bigSurface height.

bigSurface.top

Retrieves the current bigSurface top.

bigSurface.left

Retrieves the current bigSurface left.

Developing

This project uses boilerplate-gulp. Run 'gulp dev' to develop and have incremental builds, continuous testing, etc. Run 'gulp' to run regenerate the dist files.

About

Limitless space within DOM elements

Resources

Stars

19 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Big Surface is Limitless Space Within DOM Elements

Big Surface frees DOM elements from the shackles of scroll bars. WIth Big Surface, users are free to move through the space inside the element with their mouse pointer or via touch gestures. Developers (you) can place elements anywhere in side the element, whether it's top:100px; left:-300px; or top:-47474px; left:348949px;. Big Surface uses CSS3 transforms and hardware acceleration for smooth movement within the limitless plane.

Use

For plain JavaScript applications, use the dist/big-surface.js, which will inject the BigSurface object to the global scope. You can also use the file as a AMD or CommonJS module.

API

In the API BigSurface (capitalized) refers to the module object and bigSurface (lowercase) refers to a BigSurface instance which is created via BigSurface.create. Any parameter starting with opt_ is optional.

BigSurface.create(container)

Constructor function which returns a new BigSurface instance. The container is the element which will contain the BigSurface.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document body

bigSurface.speed(target, opt_duration, opt_easingFunc, opt_callback)

Sets the per-step movement speed limit in pixels for the bigSurface. For example, if target is "10", then at most the user will be able to move 10 pixels per frame (assuming 60 frames/second). If a duration is given, the speed will tween from the current value to the target value using an easing function (quadratic by default). If a callback function is given, it will be called after the given duration.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.speed(8,2);// Take 2 seconds to speed up to 8 pixels per frame in 2 second, this will trigger 'move start'setTimeout(function(){bigSurface.speed(0,10);// Take 10 seconds to come to a stop, after which the 'move stop' will fire},2000);

bigSurface.horizontalSpeed(target, opt_duration, opt_easingFunc, opt_callback)

Same as bigSurface.speed but only for horizontal movement.

bigSurface.verticalSpeed(target, opt_duration, opt_easingFunc, opt_callback)

Same as bigSurface.speed but only for vertical movement.

bigSurface.on(eventName, callback)

Allows for binding callbacks to the following events:

  • "move start", triggered when a user has the ability to move within the bigSurface.
  • "move stop", triggered when a bigSurface is locked and a user may not move within it.
  • "pointer tracking start", triggered when the tracking of the users' pointer (mouse or touch) begins.
  • "pointer tracking stop", triggered when the tracking of the users' pointer stops.

Just because a move event triggers doesn't mean the bigSurface is moving, it only signals that it's capable of moving if the user interacts with it. Same with pointer tracking -- the pointer can be tracked even while the bigSurface is locked so that when it's unlocked, it can react accordingly to the last known position of the users pointer.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.on('move start',function(){console.log("The user is free to move within the bigSurface!");})

bigSurface.removeListener(eventName, callback)

Detaches an event listener which was previously bound using bigSurface.on.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.on('move start',moveStartHandler);// bind a handlerbigSurface.removeListener('move start',moveStartHandler);// undo the previous line of code

bigSurface.element

The "infinite" bigSurface element which you can append absolutely positioned elements to.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.appendChild(myElement);// Attach an element to the bigSurface (should be absolutely positioned)

bigSurface.container

The element containing the bigSurface element. This is essentially the "window" at which the user sees the bigSurface through.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.container===document.body;// true

bigSurface.css(name, opt_value, opt_duration)

Modifies a CSS property of the bigSurface element (sets the style named name to value). If a opt_duration is given, a CSS transition will occur between the current value and the given value. If no value is given, this returns the current value of the style.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.css('opacity',0,10);// take 10 seconds to fade out the bigSurface

bigSurface.cssTransform(name, opt_value, opt_duration)

Modifies a CSS3 transform property of the bigSurface element (sets the style named name to value). If a opt_duration is given, a CSS transition will occur between the current value and the given value. If no value is given, this returns the current value of the transform.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.cssTransform('rotate','10deg');// rotate the bigSurface 10deg immediately

bigSurface.cssFilter(name, opt_value, opt_duration)

Modifies a CSS3 filter property of the bigSurface element (sets the style named name to value). If a opt_duration is given, a CSS transition will occur between the current value and the given value. If no value is given, this returns the current value of the filter.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.cssFilter('blur','100px',20);// Take 20 seconds to blur the bigSurface at 100px

bigSurface.cssTransition(name, opt_value)

Modifies a CSS3 transition property of the bigSurface element (sets the style named name to value). If no value is given, this returns the current value of the transition.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.cssFilter('opacity','100');// Set the transition time of opacity changes to 100 seconds

bigSurface.horizontalWind(target, opt_duration, opt_easingFunc, opt_callback)

Sets the base horizontal movement of the bigSurface. For example, if target is "-10", the bigSurface will move towards the left 10 pixels per frame. If a duration is given, the speed will tween from the current value to the target value using an easing function (quadratic by default). If a callback function is given, it will be called after the given duration.

varbigSurface=BigSurface.create(document.body);// Create inside the entire document bodybigSurface.horizontalWind(5);// Move the bigSurface 5px to the right every frame

bigSurface.verticalWind(target, opt_duration, opt_easingFunc, opt_callback)

Same as the horizontal wind, except for vertical movement.

bigSurface.speedGradient

This is the function which tells the bigSurface to slow movement when the pointer is near the center of the bigSurface and to speed up when it's near the edges. Use this to set or get the gradient funtion used to determine the speed of movement relative to the user's pointer positions relative to the bigSurface. The gradient is quadratic in by default. The gradient must have the following function signature: speedGradient(currentPointerPosition, 0, 1 or -1 (depending on direction), halfWidth or halfHeight) it must return a value between -1 and 1 which will be used as a multiplier against the bigSurface speed limit.

bigSurface.horizontalSpeedGradient

For getting/setting just the horizontal speed gradient.

bigSurface.verticalSpeedGradient

For getting/setting just the horizontal speed gradient.

bigSurface.width

Retrieves the current bigSurface width.

bigSurface.height

Retrieves the current bigSurface height.

bigSurface.top

Retrieves the current bigSurface top.

bigSurface.left

Retrieves the current bigSurface left.

Developing

This project uses boilerplate-gulp. Run 'gulp dev' to develop and have incremental builds, continuous testing, etc. Run 'gulp' to run regenerate the dist files.

About

Limitless space within DOM elements

Resources

Stars

19 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages