All Projects → tuax → tua-body-scroll-lock

tuax / tua-body-scroll-lock

Licence: MIT license
🔐 Body scroll locking that just works with everything

Programming Languages

typescript
32286 projects
HTML
75241 projects
javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to tua-body-scroll-lock

Body Scroll Lock
Body scroll locking that just works with everything 😏
Stars: ✭ 3,357 (+1004.28%)
Mutual labels:  scroll-lock, modal, overflow, safari, freeze, bsl, body-scroll-lock
Tua Body Scroll Lock
🔐 Body scroll locking that just works with everything
Stars: ✭ 236 (-22.37%)
Mutual labels:  firefox, modal, safari
Ublock
uBlock: a fast, lightweight, and lean blocker for Chrome, Firefox, and Safari.
Stars: ✭ 8,075 (+2556.25%)
Mutual labels:  firefox, safari
Automator
Various Automator and AppleScript workflow and scripts for simplifying life
Stars: ✭ 68 (-77.63%)
Mutual labels:  firefox, safari
Lazy
Kule Lazy4 / CSS Framework
Stars: ✭ 147 (-51.64%)
Mutual labels:  firefox, safari
Octotree
Browser extension that enhances GitHub code review and exploration. You can download Octotree for your browser from our website.
Stars: ✭ 21,726 (+7046.71%)
Mutual labels:  firefox, safari
Browsertime
Your browser, your page, your scripts!
Stars: ✭ 474 (+55.92%)
Mutual labels:  firefox, safari
Known Css Properties
List of standard and browser specific CSS properties.
Stars: ✭ 89 (-70.72%)
Mutual labels:  firefox, safari
Browser
The browser extension vault (Chrome, Firefox, Opera, Edge, Safari, & more).
Stars: ✭ 3,305 (+987.17%)
Mutual labels:  firefox, safari
Supercookie
💭 Inspiration
Stars: ✭ 3,630 (+1094.08%)
Mutual labels:  firefox, safari
Wpt
Test suites for Web platform specs — including WHATWG, W3C, and others
Stars: ✭ 3,573 (+1075.33%)
Mutual labels:  firefox, safari
Link Preview Js
Parse and/or extract web links meta information: title, description, images, videos, etc. [via OpenGraph], runs on mobiles and node.
Stars: ✭ 240 (-21.05%)
Mutual labels:  firefox, safari
Arduino Create Agent
The Arduino Create Agent
Stars: ✭ 298 (-1.97%)
Mutual labels:  firefox, safari
Etaoin
Pure Clojure Webdriver protocol implementation
Stars: ✭ 599 (+97.04%)
Mutual labels:  firefox, safari
stay-productive
Remove feed from Facebook, Twitter and Linkedin... To stay productive !
Stars: ✭ 15 (-95.07%)
Mutual labels:  firefox, safari
Freedom
The Freedom to Open URLs in Third-Party Browsers on iOS with Custom UIActivity Subclasses.
Stars: ✭ 85 (-72.04%)
Mutual labels:  firefox, safari
postcss-momentum-scrolling
PostCSS plugin add 'momentum' style scrolling behavior (-webkit-overflow-scrolling: touch) for elements with overflow (scroll, auto) on iOS
Stars: ✭ 69 (-77.3%)
Mutual labels:  overflow, safari
Ocaramba
C# Framework to automate tests using Selenium WebDriver
Stars: ✭ 234 (-23.03%)
Mutual labels:  firefox, safari
Extension Create
Create modern cross-browser extensions with no build configuration.
Stars: ✭ 167 (-45.07%)
Mutual labels:  firefox, safari
bootstrap-modal-ios
Bootstrap Modal for iOS
Stars: ✭ 20 (-93.42%)
Mutual labels:  modal, safari

tua-body-scroll-lock

inspired by body-scroll-lock

dependencies

Downloads per month Version Next Version License

English | 简体中文

Introduction

tua-body-scroll-lock enables body scroll locking for everything.

Why not body-scroll-lock(BSL)?

  • Doesn't work on Android webview
  • Doesn't work on PC with mouse wheel
  • Doesn't work on iOS, if you touch somewhere instead of targetElement
  • Must pass targetElement, even if it's not necessary

😱Can't believe it? Please try this demo with BSL yourself.

Install

Node Package Manager(recommended)

$ npm i -S tua-body-scroll-lock
# OR
$ yarn add tua-body-scroll-lock

CDN

example code
<!-- unpkg -->
<script src="https://unpkg.com/tua-body-scroll-lock"></script>

<!-- jsdelivr -->
<script src="https://cdn.jsdelivr.net/npm/tua-body-scroll-lock"></script>
example code
<!-- unpkg -->
<script src="https://unpkg.com/tua-body-scroll-lock/dist/tua-bsl.umd.min.js"></script>

<!-- jsdelivr -->
<script src="https://cdn.jsdelivr.net/npm/tua-body-scroll-lock/dist/tua-bsl.umd.min.js"></script>
example code
<!-- unpkg -->
<script type="module">
    import { lock, unlock } from 'https://unpkg.com/tua-body-scroll-lock/dist/tua-bsl.esm.browser.js'

    lock()
    unlock()
</script>

<!-- jsdelivr -->
<script type="module">
    import { lock, unlock } from 'https://cdn.jsdelivr.net/npm/tua-body-scroll-lock/dist/tua-bsl.esm.browser.js'

    lock()
    unlock()
</script>
example code
<!-- unpkg -->
<script type="module">
    import { lock, unlock } from 'https://unpkg.com/tua-body-scroll-lock/dist/tua-bsl.esm.browser.min.js'

    lock()
    unlock()
</script>

<!-- jsdelivr -->
<script type="module">
    import { lock, unlock } from 'https://cdn.jsdelivr.net/npm/tua-body-scroll-lock/dist/tua-bsl.esm.browser.min.js'

    lock()
    unlock()
</script>

Usage

Normal

import { lock, unlock } from 'tua-body-scroll-lock'

lock()
unlock()

TargetElement needs scrolling(iOS only)

In some scenarios, when scrolling is prohibited, some elements still need to scroll, at this point, pass the targetElement.

import { lock, unlock } from 'tua-body-scroll-lock'
const elementOne = document.querySelector('#elementOne')
const elementTwo = document.querySelector('#elementTwo')

// one targetElement
const targetElement = elementOne
// multiple targetElements
const targetElements = [elementOne, elementTwo]

lock(targetElement)
lock(targetElements)
unlock(targetElement)
unlock(targetElements)

The targetElement is not required on the PC and Android.

clearBodyLocks

In the SPA, if you called lock, but forgot to call unlock before jumping to other pages, that is too bad. Because the operation of the page is not restored, such as forbid touchmove, clearBodyLocks is used to clear all side effects. Sure, you can also call unlock, but if you have called lock multiple times, you must call unlock multiple times, which is very unfriendly.

demo.vue

<template>
  // some element
</template>
<script>
import { lock, unlock, clearBodyLocks } from 'tua-body-scroll-lock';

export default {
  name: 'demo',
  data () {
    return {}
  },
  methods: {
    showDialog () {
      // Disable body scroll
      lock()
    },
    hideDialog () {
      // Enable body scroll
      unlock()
    }
  },
  beforeDestroy () {
    // If forgot to call unlock before jumping to other pages, `clearBodyLocks` can clean all side effect.
    clearBodyLocks()
  }
}
</script>

Demo

bodyScrollLock

platform link
gh-pages https://tuateam.github.io/tua-body-scroll-lock
jsbin https://jsbin.com/cafiful/edit?output
codepen https://codepen.io/buptsteve/pen/PvNQjP
jsfiddle https://jsfiddle.net/buptsteve/6u8g3Lf5/
codesandbox https://codesandbox.io/s/o73z4jy5q9

Contributors

Thanks goes to these wonderful people (emoji key):


evinma

💻 📖 🚇 🌍

StEve Young

💻 📖 🚇 🌍

li2go

💻 🐛

songyan,Wang

💻 🐛

Даниил Пронин

🐛

阿卡琳

🐛

falstack

💻

This project follows the all-contributors specification. Contributions of any kind welcome!

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].