A lightweight, flexible, and dependency-free JavaScript class for creating responsive side panels (drawers/slide menus).

Features

  • Left or right sliding panel position: 'left' | 'right'
  • Any width: px, %, vw, rem, em width: 320 | '80vw' | '70%' | ...
  • Overlay with configurable color and opacity
  • Push body effect (moves content) or overlays content
  • Content filter (e.g., blur, grayscale) when open
  • Close on the outside click (without an overlay)
  • ARIA accessibility support
  • Callbacks: onInit, onOpen, onClose, onEscape
  • No external dependencies (no jQuery!)

How to use

Include SlideReveal and HTML markup



<!-- selector div#wrapper -->
<html>
    <title>SlideReveal #wrapper selector</title>
    <body>
        <div id='wrapper'>
            <header>
                <button class='toggle-panel'>Trigger</button>
            </header>
            <article>Any content here!</article>
        </div>
        <div id='panel'>
            <h2>Menu</h2>
            <ul>
                <li>Item 1</li>
                <li>Item 2</li>
            </ul>
        </div>
        <script src="/js/slidereveal.min.js"></script>
        <script>
            const menu = new SlideReveal('#panel', {
                selector: '#wrapper'
            });
        </script>
    </body>
</html>

<!-- selector body -->
<html>
<title>SlideReveal body selector</title>
    <body>
        <header>
            <button class='toggle-panel'>Trigger</button>
        </header>
        <article>Body content here!</article>
        <div id='panel'>
            <h2>Menu</h2>
            <ul>
                <li>Item 1</li>
                <li>Item 2</li>
            </ul>
        </div>
        <script src="/js/slidereveal.min.js"></script>
        <script>
            const menu = new SlideReveal('#panel', {
                selector: 'body'
            });
        </script>
    </body>
</html>


Javascript

// SlideReveal initialization and all options list
const menu = new SlideReveal('#panel', {
    width: 320,
    position: 'right',
    filter: true,
    filterStyle: 'blur(2px)',
    overlay: true,
    overlayColor: 'rgba(0,0,0,0.3)',
    closeOnOutsideClick: true,
    speed: 400,
    pushBody: true,
    selector: '#wrapper', // 'body' default
    trigger: '.toggle-panel',
    autoEscape: true,
    zIndex: 1050,
    classNames: {},
    onInit: () => null,
    onOpen: () => null,
    onClose: () => null,
    onEscape: () => null,
    ariaLabel: 'Sidebar Menu',
});

// Events
menu.onInit = () => { console.log('Init!') };
menu.onOpen = () => { console.log('Opened!') };
menu.onClose = () => { console.log('Closed!'); };
menu.onEscape = () => { console.log('Escape pressed!') };

// Methods
menu.open();
menu.close();
menu.toggle();
menu.destroy();

                                

Options

Option Type Description Default
width Number/String Panel width (px, %, vw, rem, etc.) 300
position String 'left' or 'right' 'right'
pushBody Boolean Pushes body content instead of overlaying false
overlay Boolean Shows overlay under the panel true
overlayColor String Overlay color (CSS value) 'rgba(0,0,0,0.3)'
filter Boolean Applies CSS filter to page content (blur, etc) false
filterStyle String CSS filter value (e.g., 'blur(2px)') 'blur(2px)'
closeOnOutsideClick Boolean Closes panel when clicking outside (only if no overlay) false
selector String Selector for affected content (normally 'body') 'body'
trigger String/HTMLElement Selector or element for open/close trigger null
speed Number Animation duration in ms 400
autoEscape Boolean Closes panel with Escape key true
zIndex Number zIndex for panel (default) and body (default - 1) 1050
ariaLabel String ARIA label for accessibility 'Menu'
onInit Function Callback after panel initialization null
onOpen Function Callback after panel opens null
onClose Function Callback after panel closes null
onEscape Function Callback after closing by Escape null

Right Panel


const menu = new SlideReveal('#panel', {
    position: 'right',
    filter: true,
    pushBody: true,
    filterStyle: 'blur(3px) grayscale(100%)'
});

                    

Left Panel


const menu = new SlideReveal('#panel', {
    position: 'left'
});

                    
Disclaimer Special thanks Features How to use Options Examples with options