Запретить прокрутку страницы css

Prevent Scroll On Scrollable Elements [JS & CSS]

If you ever need to temporally disable scrolling on a specific scrollable element, then you will need to use JavaScript or CSS for it. Depending on your use case, you can choose between JavaScript and CSS solutions. Although in general terms the CSS solution is the most adopted one, JavaScript offers you a bit more of control and flexibility and allows you to decide how exactly you want to stop the scrolling.

1. Cancelling scroll using JavaScript

One of the options is to listen to the wheel event on the element you want to prevent the scrolling and then prevent the default behavior as well as stopping the propagation and returning a false value.

Something as simple as this, where #scrollable would be the ID of our scrollable element.

document.querySelector('#scrollable').addEventListener('wheel', preventScroll, passive: false>);

function preventScroll(e)
e.preventDefault();
e.stopPropagation();

return false;
>

Notice as well that we are using the option on the event listener. This is actually because we have to tell browsers that, eventually, we might call preventDefault and cancel the default behavior. This way the browser is aware of it and can decide how to treat the event. You can read more about it on the docs.

If you need to provide support for IE 11 you might need to add a fallback for the passive event param as it is not supported check if the passive event is supported.

Now, what if we want to enable or disable this dynamically? Here’s an example with a couple of buttons, one to disable the scroll and another one to enable it:

If you want to apply it to multiple elements, it is as easy as iterating over them and applying them to the same function.

document.querySelector('.scrollable').forEach(function(item) 
item.addEventListener('wheel', preventScroll);
>);

Now, take a look at the CSS way because the JS way can get a bit more complicated if we take into account keyboard and touch scrolling.

2. Disabling scroll with only CSS

There’s another way to disable scrolling that is commonly used when opening modals or scrollable floating elements. And it is simply by adding the CSS property overflow: hidden; on the element you want to prevent the scroll.

It is clearly the easiest solution if you want to disable scroll no matter what triggers it (mouse, keyboard, or touch), but at the same time, it won’t give you the flexibility of choosing what to disable and what not.

There’s a couple of differences with the previous way. They can be good for you, or not, depending on your use case:

  • It will also disable the keyboard scrolling too. So, you won’t be able to move up or down by using the keyboard arrows and space bar, etc.
  • It will not allow you to scroll up/down by selecting text.
  • It will disable touch scroll too.
  • It might also prevent scrolling using «the third button» of the mouse, which is pressing the mousewheel while dragging the mouse. (If anyone can verify this for me that’d be great, as I don’t have a mouse to test it at the moment 🙂 )

So, how do we do it? We create a class that we will toggle whenever we need it and that all it does is preventing the scroll on the element we apply it.

.disable-scroll 
overflow-y: hidden;
>

Then, with JavaScript we simply add or remove it when we want:


function disable()
document.querySelector('.scrollable').classList.add('disable-scroll');
>

function enable()
document.querySelector('.scrollable').classList.remove('disable-scroll');
>

document.querySelector('#prevent').addEventListener('click', disable);
document.querySelector('#allow').addEventListener('click', enable);

3. Preventing keyboard scroll using JavaScript

If you decide to go for the JS solution, then you might also want to disable scroll through the keyboard.

In this case, we simply have to listen to the keydown event and prevent the default behavior when we detect they are pressing any key that can trigger a scroll movement, such as the keyboard arrows, spacebar, shift+space bar, pageup, pagedown etc.

document.addEventListener('keydown', preventKeyBoardScroll, false);

function preventKeyBoardScroll(e)
var keys = [32, 33, 34, 35, 37, 38, 39, 40];
if (keys.includes(e.keyCode))
e.preventDefault();
return false;
>
>

4. Preventing touch scroll using JavaScript

And of course, we can’t forget about the touch scroll. The CSS solution seems to make things like this much easier for us, but if we need total control over what we allow users to do and what not, then probably the JavaScript version is the way to go.

Regarding touch events, this is pretty similar to canceling the scroll for the wheel event.

We simply have to add the exact same function on a touchmove event listener:

var scrollable = document.querySelector('.scrollable');
scrollable.addEventListener('touchmove', disable, passive: false>);

5. Using a npm module to disable scroll

You will also find there are a few components and modules out there that give you this feature out of the box.

Some only apply to the whole document while others allow you to be applied to specific scrollable elements.

Источник

How to Disable Scrolling on a Webpage with HTML, CSS, and JavaScript?

Javascript Course - Mastering the Fundamentals

Scrolling a webpage while navigating can be controlled by using some JavaScript and CSS or either one of them as well. We shall explore different methods to disable and enable the scrolling functionality of a webpage along with some example code snippets.

Pre-requisite

The prerequisite for understanding this article is the basic understanding of CSS and JavaScript DOM methods like querySelector , and getElementById as well as adding the event listeners to HTML elements.

By Overriding the window.onscroll Function

One of the ways to disable scroll on a webpage is using the window.onscroll event. Let’s understand this event.

window.onscroll

The onscroll event on windows is triggered when the window’s scrollbar is being scrolled.

We can set the position of this windows.onscroll event to a fixed value then it will prevent the page from scrolling in the vertical or horizontal direction or both.

To do this we need to fix the vertical and horizontal position of the page to the current values which can be done using the following JavaScript functions.

Calculating the current vertical position of the page: To calculate the current vertical scroll position of the web page in pixels document.documentElement.scrollTop and window.pageYOffset functions are used with OR (|) operator because one of them may return 0 value in some of the browsers.

document.documentElement.scrollTop method of JavaScript calculates the number of pixels from the top of the webpage by which the page is scrolled down.

The window.pageYOffset method of JavaScript also calculates the number of pixels from the top of the webpage by which the page is scrolled down. Since some of browsers do not support the former method then this method comes as an alternative.

Calculating the current horizontal position of the page:

To calculate the current horizontal position of the webpage in pixels document.documentElement.scrollLeft and window.pageXOffset values functions are used with the OR (|) operator because one of them may return 0 value in the browsers.

The document.documentElement.scrollLeft method is used to get the number of pixels to the left of the page by which the webpage is displaced to the right.

window.pageXOffset values method is also used to get the number of pixels to the left of the page by which the webpage is displaced to the right but the former method is not supported by some of the browsers, therefore, this method comes as an alternative.

Now, to assign the above-calculated values to the windows.scroll event we may use the window.scrollTo() function and pass the calculated values in this function as arguments to fix the horizontal and vertical position of the webpage.

Let’s see the implementation of the above functionality.

Let’s try to understand the above snippet. The output of the above code looks like this.

disable-scrolling-by-overriding-window-onscroll

Here, when we click the Disable Scrolling button then we trigger the function disableScroll() where we are calculating the scroll position in the vertical direction in the scrollTop variable and the scroll position in the horizontal direction in the scrollLeft variable. After calculating these values we assign them to the scroll event of the window using the function called window.scrollTo(scrollTop,scrollLeft) .

When the Enable Scrolling button is clicked then we trigger the function enableScroll() which simply puts the value of the window.scroll event to blank and enables scrolling.

By Setting the Height of the Body to 100% and Overflow to Hidden

Scrolling of the webpage can also be disabled by using only the CSS using the overflow property. In this method, we set the height of the element for which the scroll is disabled to 100% such that it covers all the space of its parent container, and then we set the overflow property to hidden.

For the horizontal scrolling, we use the property overflow-x and set it to hidden.

We shall use JavaScript to add these properties to the HTML document.

Let’s see the implementation

use-property-overflow-x-set-to-hidden-output

It will have the same effect as with the window.onscroll but with a few differences. Let’s discuss those differences.

  1. It will disable the keyboard scrolling as well. Therefore we won’t be able to move up and down using a keyboard, mouse or spacebar, etc.
  2. It will disable the touch scroll as well
  3. It will disable the scroll up and down by selecting the text.

Set overflow-x to Hidden to Disable Horizontal Scroll Bar in CSS

For disabling the horizontal scrolling we can set the property overflow-x to hidden along with the height is set to 100%. Everything else remains the same. Let’s see the implementation for this.

set-overflow-x-to-hidden-output

Preventing Keyboard Scroll Using JavaScript

Suppose, we want to prevent only the keyboard scroll but want to keep other scrolls, in that case, we need to add a keydown event Listener because this will detect which key is pressed and we can prevent the default behavior of the document if the key pressed is keyboard arrows, spacebar, shift+space bar, pageup, pagedown, etc.

We create an event Listener which takes an event argument and checks if the event(button pressed) has a keyCode equal to some of the keycodes already stored in an array. If it matches with one of them then we call the function preventDefault() and return false. This will disable the scrolling effect using that key.

To enable the scrolling effect we simply remove that eventListner added with that particular keypress.

Let’s see the implementation of the above strategy.

use-preventdefault-to-prevent-keyboard-scroll-output

Preventing Touch Scroll Using JavaScript

To prevent the touch scroll, we need to add a touchmove event listener which prevents the default behavior while we perform touch scroll. This can be accomplished by creating a function called disableTouchScroll() which takes a touchmove event and prevents the default behavior using the function preventDefault() and stops the propagation using the stopPropagation() function of the event.

This can be implemented as follows

Applying CSS to Hide the Scrollbar in Website’s Code

To hide the scrollbar in the website’s code we can use the -ms-overflow-style property in the body element where we can set it to node as well as the -webkit-scrollbar property where we set the display property for this as none, this ultimately hides the scrollbar.

Let’s understand this with the implementation:

Using the above css one can hide the scrollbar.

Conclusion

  1. We conclude that the scrolling effect of a webpage can be controlled using CSS and JavaScript.
  2. One of the methods to disable and enable scrolling is to override the window.onscroll method.
  3. We can also control specific scroll events like touch scroll, keyboard scroll, etc.
  4. Scrolling is controlled in two directions i.e. vertical and horizontal.
  5. Some of the important functions involved in the calculation of the scrolled amount of webpage are as follows.
    • document.documentElement.scrollTop.
    • document.documentElement.scrollLeft.
    • window.pageYOffset.
    • window.pageXOffset.

Источник

Читайте также:  Найти произведение цифр заданного четырехзначного числа javascript
Оцените статью