Use case scenarios in Vue Menu component
11 Jun 202424 minutes to read
Scrollable menu
The menu component supports horizontal and vertical scrolling to render large menus and submenus in an adaptive way. This can be achieved by enabling the enableScrolling
property and by restricting the corresponding menu/submenu size.
<template>
<div>
<ejs-menu :items='menuItems' :beforeOpen='onBeforeOpen' cssClass='e-scrollable-menu'
:enableScrolling='true'></ejs-menu>
</div>
</template>
<script setup>
import { MenuComponent as EjsMenu } from "@syncfusion/ej2-vue-navigations";
import { enableRipple, closest } from '@syncfusion/ej2-base';
enableRipple(true);
// Menu items definition
const menuItems = [
{
text: 'Appliances',
items: [
{
text: 'Kitchen',
items: [
{ text: 'Electric Cookers' },
{ text: 'Coffee Makers' },
{ text: 'Blenders' },
{ text: 'Microwave Ovens' }
]
},
{
text: 'Television',
items: [
{ text: 'Our Exclusive TVs' },
{ text: 'Smart TVs' },
{ text: 'Big Screen TVs' }
]
},
{
text: 'Washing Machine'
},
{
text: 'Refrigerators'
},
{
text: 'Air Conditioners',
items: [
{ text: 'Inverter ACs' },
{ text: 'Split ACs' },
{ text: 'Window ACs' },
]
},
{
text: 'Water Purifiers'
},
{
text: 'Air Purifiers'
},
{
text: 'Chimneys'
},
{
text: 'Inverters'
},
{
text: 'Healthy Living'
},
{
text: 'Vacuum Cleaners'
},
{
text: 'Room Heaters'
},
{
text: 'New Launches'
}
]
},
{
text: 'Accessories',
items: [
{
text: 'Mobile',
items: [
{ text: 'Headphones' },
{ text: 'Memory Cards' },
{ text: 'Power Banks' },
{ text: 'Mobile Cases' },
{ text: 'Screen Protectors' }
]
},
{
text: 'Laptops'
},
{
text: 'Desktop PC',
items: [
{ text: 'Pendrives' },
{ text: 'External Hard Disks' },
{ text: 'Monitors' },
{ text: 'Keyboards' }
]
},
{
text: 'Camera',
items: [
{ text: 'Lens' },
{ text: 'Tripods' }
]
}
]
},
{
text: 'Fashion',
items: [
{
text: 'Men'
},
{
text: 'Women'
}
]
},
{
text: 'Home & Living',
items: [
{
text: 'Furniture'
},
{
text: 'Decor'
},
{
text: 'Smart Home Automation'
},
{
text: 'Dining & Serving'
}
]
},
{
text: 'Entertainment',
items: [
{
text: 'Televisions'
},
{
text: 'Home Theatres'
},
{
text: 'Gaming Laptops'
}
]
},
{
text: 'Contact Us'
},
{
text: 'Help'
}];
const onBeforeOpen = (args) => {
// Restricting sub menu wrapper height
if (args.parentItem.text === 'Appliances') {
closest(args.element, '.e-menu-wrapper').style.height = '230px';
}
};
</script>
<style>
@import "../node_modules/@syncfusion/ej2-base/styles/material.css";
@import "../node_modules/@syncfusion/ej2-popups/styles/material.css";
@import "../node_modules/@syncfusion/ej2-navigations/styles/material.css";
body {
margin-top: 100px;
text-align: center;
}
/* Restricting the parent menu wrapper size */
.e-menu-wrapper.e-scrollable-menu:not(.e-menu-popup) {
width: 492px;
}
</style>
<template>
<div>
<ejs-menu :items='menuItems' :beforeOpen='onBeforeOpen' cssClass='e-scrollable-menu'
:enableScrolling='true'></ejs-menu>
</div>
</template>
<script>
import { MenuComponent } from "@syncfusion/ej2-vue-navigations";
import { enableRipple, closest } from '@syncfusion/ej2-base';
enableRipple(true);
export default {
name: "App",
components: {
"ejs-menu": MenuComponent
},
data: function () {
return {
// Menu items definition
menuItems: [
{
text: 'Appliances',
items: [
{
text: 'Kitchen',
items: [
{ text: 'Electric Cookers' },
{ text: 'Coffee Makers' },
{ text: 'Blenders' },
{ text: 'Microwave Ovens' }
]
},
{
text: 'Television',
items: [
{ text: 'Our Exclusive TVs' },
{ text: 'Smart TVs' },
{ text: 'Big Screen TVs' }
]
},
{
text: 'Washing Machine'
},
{
text: 'Refrigerators'
},
{
text: 'Air Conditioners',
items: [
{ text: 'Inverter ACs' },
{ text: 'Split ACs' },
{ text: 'Window ACs' },
]
},
{
text: 'Water Purifiers'
},
{
text: 'Air Purifiers'
},
{
text: 'Chimneys'
},
{
text: 'Inverters'
},
{
text: 'Healthy Living'
},
{
text: 'Vacuum Cleaners'
},
{
text: 'Room Heaters'
},
{
text: 'New Launches'
}
]
},
{
text: 'Accessories',
items: [
{
text: 'Mobile',
items: [
{ text: 'Headphones' },
{ text: 'Memory Cards' },
{ text: 'Power Banks' },
{ text: 'Mobile Cases' },
{ text: 'Screen Protectors' }
]
},
{
text: 'Laptops'
},
{
text: 'Desktop PC',
items: [
{ text: 'Pendrives' },
{ text: 'External Hard Disks' },
{ text: 'Monitors' },
{ text: 'Keyboards' }
]
},
{
text: 'Camera',
items: [
{ text: 'Lens' },
{ text: 'Tripods' }
]
}
]
},
{
text: 'Fashion',
items: [
{
text: 'Men'
},
{
text: 'Women'
}
]
},
{
text: 'Home & Living',
items: [
{
text: 'Furniture'
},
{
text: 'Decor'
},
{
text: 'Smart Home Automation'
},
{
text: 'Dining & Serving'
}
]
},
{
text: 'Entertainment',
items: [
{
text: 'Televisions'
},
{
text: 'Home Theatres'
},
{
text: 'Gaming Laptops'
}
]
},
{
text: 'Contact Us'
},
{
text: 'Help'
}]
};
},
methods: {
onBeforeOpen(args) {
// Restricting sub menu wrapper height
if (args.parentItem.text === 'Appliances') {
closest(args.element, '.e-menu-wrapper').style.height = '230px';
}
}
}
}
</script>
<style>
@import "../node_modules/@syncfusion/ej2-base/styles/material.css";
@import "../node_modules/@syncfusion/ej2-popups/styles/material.css";
@import "../node_modules/@syncfusion/ej2-navigations/styles/material.css";
body {
margin-top: 100px;
text-align: center;
}
/* Restricting the parent menu wrapper size */
.e-menu-wrapper.e-scrollable-menu:not(.e-menu-popup) {
width: 492px;
}
</style>
Menu in toolbar
The following example demonstrates how to integrate Menu with Toolbar component.
<template>
<div class="toolbar-menu-control">
<ejs-toolbar ref="toolbar" :created="onCreated">
<e-items>
<e-item :template='menuTemplate'></e-item>
<e-item prefixIcon='em-icons e-shopping-cart' align='Right'></e-item>
</e-items>
</ejs-toolbar>
</div>
</template>
<script setup>
import { MenuComponent } from "@syncfusion/ej2-vue-navigations";
import { ToolbarComponent as EjsToolbar, ItemsDirective as EItems, ItemDirective as EItem } from "@syncfusion/ej2-vue-navigations";
import { enableRipple } from '@syncfusion/ej2-base';
import { createApp, ref } from "vue";
enableRipple(true);
const toolbar = ref(null);
var menutemplateVue = createApp().component("demo1", {
template: '<ejs-menu :items="menuItems" :animationSettings="animation"></ejs-menu>',
components: {
"ejs-menu": MenuComponent
},
data() {
return {
data: {},
menuItems: [
{
text: 'Appliances',
items: [
{
text: 'Kitchen',
items: [
{ text: 'Electric Cookers' },
{ text: 'Coffee Makers' },
{ text: 'Blenders' }
]
},
{
text: 'Washing Machine',
items: [
{ text: 'Fully Automatic' },
{ text: 'Semi Automatic' }
]
},
{
text: 'Air Conditioners',
items: [
{ text: 'Inverter ACs' },
{ text: 'Split ACs' },
{ text: 'Window ACs' }
]
}
]
},
{
text: 'Accessories',
items: [
{
text: 'Mobile',
items: [
{ text: 'Headphones' },
{ text: 'Memory Cards' },
{ text: 'Power Banks' }
]
},
{
text: 'Computer',
items: [
{ text: 'Pendrives' },
{ text: 'External Hard Disks' },
{ text: 'Monitors' }
]
}
]
},
{
text: 'Fashion',
items: [
{
text: 'Men',
items: [
{ text: 'Shirts' },
{ text: 'Jackets' },
{ text: 'Track Suits' }
]
},
{
text: 'Women',
items: [
{ text: 'Kurtas' },
{ text: 'Salwars' },
{ text: 'Sarees' }
]
}
]
},
{
text: 'Home & Living',
items: [
{
text: 'Furniture',
items: [
{ text: 'Beds' },
{ text: 'Mattresses' },
{ text: 'Dining Tables' }
]
},
{
text: 'Decor',
items: [
{ text: 'Clocks' },
{ text: 'Wall Decals' },
{ text: 'Paintings' }
]
}
]
}
],
animation: { effect: 'none' }
};
}
});
const menuTemplate = () => {
return {
template: menutemplateVue
}
};
const onCreated = () => {
toolbar.value.$el.ej2_instances[0].refreshOverflow();
};
</script>
<style>
@import "../node_modules/@syncfusion/ej2-base/styles/material.css";
@import "../node_modules/@syncfusion/ej2-popups/styles/material.css";
@import "../node_modules/@syncfusion/ej2-navigations/styles/material.css";
body {
margin-top: 100px;
text-align: center;
}
@font-face {
font-family: 'e-menu';
src:
url(data:application/x-font-ttf;charset=utf-8;base64,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) format('truetype');
font-weight: normal;
font-style: normal;
}
.em-icons {
font-family: 'e-menu';
font-style: normal;
font-variant: normal;
font-weight: normal;
text-transform: none;
line-height: 2;
}
.toolbar-menu-control .e-toolbar-items .e-toolbar-item .e-tbar-btn .e-btn-icon.e-shopping-cart {
font-size: 20px;
margin-right: 1px;
}
.toolbar-menu-control .e-shopping-cart::before {
content: '\e7e8';
}
.toolbar-menu-control .e-menu-wrapper .e-menu {
border: none;
}
.toolbar-menu-control {
margin: 45px auto 0;
max-width: 950px;
}
.toolbar-menu-control .e-toolbar .e-toolbar-left .e-toolbar-item.e-template {
padding: 0;
}
.toolbar-menu-control .e-toolbar {
overflow: visible !important;
}
.toolbar-menu-control .e-menu-wrapper {
margin-right: 160px;
}
.toolbar-menu-control .e-hscroll .e-hscroll-content {
position: static;
}
@media only screen and (max-width: 1300px) {
.toolbar-menu-control {
width: auto;
}
}
</style>
<template>
<div class="toolbar-menu-control">
<ejs-toolbar ref="toolbar" :created="onCreated">
<e-items>
<e-item :template='menuTemplate'></e-item>
<e-item prefixIcon='em-icons e-shopping-cart' align='Right'></e-item>
</e-items>
</ejs-toolbar>
</div>
</template>
<script>
import { MenuComponent, ToolbarComponent, ItemDirective, ItemsDirective, } from "@syncfusion/ej2-vue-navigations";
import { enableRipple } from '@syncfusion/ej2-base';
import { createApp } from "vue";
enableRipple(true);
var menutemplateVue = createApp().component("demoTemplate", {
template: '<ejs-menu :items="menuItems" :animationSettings="animation"></ejs-menu>',
components: {
"ejs-menu": MenuComponent
},
data() {
return {
data: {},
menuItems: [
{
text: 'Appliances',
items: [
{
text: 'Kitchen',
items: [
{ text: 'Electric Cookers' },
{ text: 'Coffee Makers' },
{ text: 'Blenders' }
]
},
{
text: 'Washing Machine',
items: [
{ text: 'Fully Automatic' },
{ text: 'Semi Automatic' }
]
},
{
text: 'Air Conditioners',
items: [
{ text: 'Inverter ACs' },
{ text: 'Split ACs' },
{ text: 'Window ACs' }
]
}
]
},
{
text: 'Accessories',
items: [
{
text: 'Mobile',
items: [
{ text: 'Headphones' },
{ text: 'Memory Cards' },
{ text: 'Power Banks' }
]
},
{
text: 'Computer',
items: [
{ text: 'Pendrives' },
{ text: 'External Hard Disks' },
{ text: 'Monitors' }
]
}
]
},
{
text: 'Fashion',
items: [
{
text: 'Men',
items: [
{ text: 'Shirts' },
{ text: 'Jackets' },
{ text: 'Track Suits' }
]
},
{
text: 'Women',
items: [
{ text: 'Kurtas' },
{ text: 'Salwars' },
{ text: 'Sarees' }
]
}
]
},
{
text: 'Home & Living',
items: [
{
text: 'Furniture',
items: [
{ text: 'Beds' },
{ text: 'Mattresses' },
{ text: 'Dining Tables' }
]
},
{
text: 'Decor',
items: [
{ text: 'Clocks' },
{ text: 'Wall Decals' },
{ text: 'Paintings' }
]
}
]
}
],
animation: { effect: 'none' }
};
}
});
export default {
name: "App",
components: {
"ejs-toolbar": ToolbarComponent,
"e-items": ItemsDirective,
"e-item": ItemDirective
},
data: function () {
return {
menuTemplate: function () {
return {
template: menutemplateVue
}
}
}
},
methods: {
onCreated: function () {
this.$refs.toolbar.$el.ej2_instances[0].refreshOverflow();
}
}
}
</script>
<style>
@import "../node_modules/@syncfusion/ej2-base/styles/material.css";
@import "../node_modules/@syncfusion/ej2-popups/styles/material.css";
@import "../node_modules/@syncfusion/ej2-navigations/styles/material.css";
body {
margin-top: 100px;
text-align: center;
}
@font-face {
font-family: 'e-menu';
src:
url(data:application/x-font-ttf;charset=utf-8;base64,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) format('truetype');
font-weight: normal;
font-style: normal;
}
.em-icons {
font-family: 'e-menu';
font-style: normal;
font-variant: normal;
font-weight: normal;
text-transform: none;
line-height: 2;
}
.toolbar-menu-control .e-toolbar-items .e-toolbar-item .e-tbar-btn .e-btn-icon.e-shopping-cart {
font-size: 20px;
margin-right: 1px;
}
.toolbar-menu-control .e-shopping-cart::before {
content: '\e7e8';
}
.toolbar-menu-control .e-menu-wrapper .e-menu {
border: none;
}
.toolbar-menu-control {
margin: 45px auto 0;
max-width: 950px;
}
.toolbar-menu-control .e-toolbar .e-toolbar-left .e-toolbar-item.e-template {
padding: 0;
}
.toolbar-menu-control .e-toolbar {
overflow: visible !important;
}
.toolbar-menu-control .e-menu-wrapper {
margin-right: 160px;
}
.toolbar-menu-control .e-hscroll .e-hscroll-content {
position: static;
}
@media only screen and (max-width: 1300px) {
.toolbar-menu-control {
width: auto;
}
}
</style>
Hamburger menu
The following example demonstrates the use case of menu with Accordion component integrated in SideBar.
<template>
<div>
<div class="header">
<span id="hamburger" class="e-icons menu default" @click='hamburgerClick'></span>
<div class="content">Header content</div>
</div>
<ejs-sidebar ref="sidebar" id='default-sidebar' width='220px' type='Over'>
<div class="title-header">
<div style="display:inline-block"> Menu </div>
<span id="close" class="e-icons" @click='close'></span>
</div>
<div class="content-area">
<ejs-accordion ref="accordion" :items='items' :expanding='expand' :clicked='clicked'></ejs-accordion>
</div>
</ejs-sidebar>
</div>
</template>
<script setup>
import { Accordion } from "@syncfusion/ej2-navigations";
import { SidebarComponent as EjsSidebar, AccordionComponent as EjsAccordion } from "@syncfusion/ej2-vue-navigations";
import { enableRipple } from '@syncfusion/ej2-base';
import { ref } from "vue";
enableRipple(true);
const sidebar = ref(null);
const items = [
{
header: 'Appliances',
content: '<div id="Appliances_Items"></div>',
subItems: [
{
header: 'Kitchen',
content: '<div id="Appliances_Kitchen_Items"></div>',
subItems: [
{ header: 'Electric Cookers' },
{ header: 'Coffee Makers' },
{ header: 'Blenders' },
]
},
{
header: 'Washing Machine',
content: '<div id="Appliances_Washing_Items"></div>',
subItems: [
{ header: 'Fully Automatic' },
{ header: 'Semi Automatic' }
]
},
{
header: 'Air Conditioners',
content: '<div id="Appliances_Conditioners_Items"></div>',
subItems: [
{ header: 'Inverter ACs' },
{ header: 'Split ACs' },
{ header: 'Window ACs' },
]
}
]
},
{
header: 'Accessories',
content: '<div id="Accessories_Items"></div>',
subItems: [
{
header: 'Mobile',
content: '<div id="Accessories_Mobile_Items"></div>',
subItems: [
{ header: 'Headphones' },
{ header: 'Memory Cards' },
{ header: 'Power Banks' }
]
},
{
header: 'Computer',
content: '<div id="Accessories_Computer_Items"></div>',
subItems: [
{ header: 'Pendrives' },
{ header: 'External Hard Disks' },
{ header: 'Monitors' }
]
}
]
},
{
header: 'Fashion',
content: '<div id="Fashion_Items"></div>',
subItems: [
{ header: 'Men' },
{ header: 'Women' }
]
},
{
header: 'Home & Living',
content: '<div id="Home_Living_Items"></div>',
subItems: [
{ header: 'Furniture' },
{ header: 'Decor' }
]
},
{
header: 'Entertainment',
content: '<div id="Entertainment_Items"></div>',
subItems: [
{ header: 'Televisions' },
{ header: 'Home Theatres' },
{ header: 'Gaming Laptops' }
]
}
];
const expand = (e) => {
if (e.isExpanded) {
if (e.element.getElementsByClassName('e-acrdn-content')[0].children[0].classList.contains('e-accordion')) {
return;
}
//Initialize Nested Accordion component
var nestAcrdn = new Accordion({
items: e.item.subItems,
expanding: expand,
clicked: clicked
});
var elemId = e.element.getElementsByClassName('e-acrdn-content')[0].children[0].id;
//Render initialized Nested Accordion component
nestAcrdn.appendTo('#' + elemId);
}
};
const clicked = (e) => {
if (!e.item && !(e.originalEvent.target.closest('.e-acrdn-item').getElementsByClassName('e-tgl-collapse-icon').length)) {
sidebar.value.hide();
}
};
const hamburgerClick = () => {
sidebar.value.show();
};
const close = () => {
sidebar.value.hide();
};
</script>
<style>
@import "../node_modules/@syncfusion/ej2-base/styles/material.css";
@import "../node_modules/@syncfusion/ej2-navigations/styles/material.css";
body {
margin: 0;
}
.header {
width: 100%;
background-color: #7b8cfb;
}
#default-sidebar,
.header .content {
background-color: #7b8cfb;
color: white;
border: none;
}
.header .content {
font-size: 20px;
line-height: 50px;
text-align: center;
}
.main-content {
text-align: center;
font-size: 20px;
padding: 100px 15px;
}
#default-sidebar .close-btn:hover {
color: rgba(0, 0, 0, .87);
background-color: #fafafa;
}
#hamburger.menu {
font-size: 25px;
cursor: pointer;
float: left;
line-height: 50px;
position: absolute;
z-index: 1000;
left: 25px;
color: white;
}
#hamburger.menu:before {
content: '\e99a';
}
#close:before {
content: "\e945";
}
.title-header {
text-align: center;
font-size: 18px;
padding: 15px 15px 35px;
}
.e-sidebar .title-header #close {
cursor: pointer;
line-height: 25px;
float: right;
}
</style>
<template>
<div>
<div class="header">
<span id="hamburger" class="e-icons menu default" @click='hamburgerClick'></span>
<div class="content">Header content</div>
</div>
<ejs-sidebar ref="sidebar" id='default-sidebar' width='220px' type='Over'>
<div class="title-header">
<div style="display:inline-block"> Menu </div>
<span id="close" class="e-icons" @click='close'></span>
</div>
<div class="content-area">
<ejs-accordion ref="accordion" :items='items' :expanding='expand' :clicked='clicked'></ejs-accordion>
</div>
</ejs-sidebar>
</div>
</template>
<script>
import { Accordion } from "@syncfusion/ej2-navigations";
import { SidebarComponent, AccordionComponent } from "@syncfusion/ej2-vue-navigations";
import { enableRipple } from '@syncfusion/ej2-base';
enableRipple(true);
export default {
name: "App",
components: {
"ejs-sidebar": SidebarComponent,
"ejs-accordion": AccordionComponent
},
data: function () {
return {
items: [
{
header: 'Appliances',
content: '<div id="Appliances_Items"></div>',
subItems: [
{
header: 'Kitchen',
content: '<div id="Appliances_Kitchen_Items"></div>',
subItems: [
{ header: 'Electric Cookers' },
{ header: 'Coffee Makers' },
{ header: 'Blenders' },
]
},
{
header: 'Washing Machine',
content: '<div id="Appliances_Washing_Items"></div>',
subItems: [
{ header: 'Fully Automatic' },
{ header: 'Semi Automatic' }
]
},
{
header: 'Air Conditioners',
content: '<div id="Appliances_Conditioners_Items"></div>',
subItems: [
{ header: 'Inverter ACs' },
{ header: 'Split ACs' },
{ header: 'Window ACs' },
]
}
]
},
{
header: 'Accessories',
content: '<div id="Accessories_Items"></div>',
subItems: [
{
header: 'Mobile',
content: '<div id="Accessories_Mobile_Items"></div>',
subItems: [
{ header: 'Headphones' },
{ header: 'Memory Cards' },
{ header: 'Power Banks' }
]
},
{
header: 'Computer',
content: '<div id="Accessories_Computer_Items"></div>',
subItems: [
{ header: 'Pendrives' },
{ header: 'External Hard Disks' },
{ header: 'Monitors' }
]
}
]
},
{
header: 'Fashion',
content: '<div id="Fashion_Items"></div>',
subItems: [
{ header: 'Men' },
{ header: 'Women' }
]
},
{
header: 'Home & Living',
content: '<div id="Home_Living_Items"></div>',
subItems: [
{ header: 'Furniture' },
{ header: 'Decor' }
]
},
{
header: 'Entertainment',
content: '<div id="Entertainment_Items"></div>',
subItems: [
{ header: 'Televisions' },
{ header: 'Home Theatres' },
{ header: 'Gaming Laptops' }
]
}
],
};
},
methods: {
expand: function (e) {
if (e.isExpanded) {
if (e.element.getElementsByClassName('e-acrdn-content')[0].children[0].classList.contains('e-accordion')) {
return;
}
//Initialize Nested Accordion component
var nestAcrdn = new Accordion({
items: e.item.subItems,
expanding: this.expand,
clicked: this.clicked
});
var elemId = e.element.getElementsByClassName('e-acrdn-content')[0].children[0].id;
//Render initialized Nested Accordion component
nestAcrdn.appendTo('#' + elemId);
}
},
clicked: function (e) {
if (!e.item && !(e.originalEvent.target.closest('.e-acrdn-item').getElementsByClassName('e-tgl-collapse-icon').length)) {
this.$refs.sidebar.hide();
}
},
hamburgerClick: function () {
this.$refs.sidebar.show();
},
close: function () {
this.$refs.sidebar.hide();
}
}
}
</script>
<style>
@import "../node_modules/@syncfusion/ej2-base/styles/material.css";
@import "../node_modules/@syncfusion/ej2-navigations/styles/material.css";
body {
margin: 0;
}
.header {
width: 100%;
background-color: #7b8cfb;
}
#default-sidebar,
.header .content {
background-color: #7b8cfb;
color: white;
border: none;
}
.header .content {
font-size: 20px;
line-height: 50px;
text-align: center;
}
.main-content {
text-align: center;
font-size: 20px;
padding: 100px 15px;
}
#default-sidebar .close-btn:hover {
color: rgba(0, 0, 0, .87);
background-color: #fafafa;
}
#hamburger.menu {
font-size: 25px;
cursor: pointer;
float: left;
line-height: 50px;
position: absolute;
z-index: 1000;
left: 25px;
color: white;
}
#hamburger.menu:before {
content: '\e99a';
}
#close:before {
content: "\e945";
}
.title-header {
text-align: center;
font-size: 18px;
padding: 15px 15px 35px;
}
.e-sidebar .title-header #close {
cursor: pointer;
line-height: 25px;
float: right;
}
</style>
Mobile view
The following example demonstrates the use case of Menu in Mobile mode by using ListView component with hamburger.
Install Syncfusion Lists
packages using below command.
npm install @syncfusion/ej2-vue-lists --save
<template>
<div class="layoutWrapper">
<div class="speaker">
<div class="camera"></div>
</div>
<div class="layout">
<div id="container">
<div id="header">
<span id="hamburger" @click="hamburgerClick" class="e-icons menu default"></span>
<div class="content">Header</div>
</div>
<!-- ListView element -->
<ejs-listview ref="listview" :dataSource="dataSource" headerTitle="Menu" :showHeader="true" :select="onSelect"
tabindex="1" v-bind:style="{ display: 'none' }"></ejs-listview>
<span id="close" @click="onClick" class="e-icons" v-bind:style="{ display: 'none' }"></span>
</div>
</div>
<div class="outerButton"> </div>
</div>
</template>
<script setup>
import { ListViewComponent as EjsListview } from "@syncfusion/ej2-vue-lists";
import { enableRipple, Animation } from '@syncfusion/ej2-base';
import { ref } from 'vue';
enableRipple(true);
const listview = ref(null);
const dataSource = [
{
text: 'Appliances',
id: 'list1',
child: [
{
text: 'Kitchen',
id: 'list1_1',
child: [
{ id: 'list1_1_1', text: 'Electric Cookers' },
{ id: 'list1_1_2', text: 'Coffee Makers' },
{ id: 'list1_1_3', text: 'Blenders' },
]
},
{
text: 'Washing Machine',
id: 'list1_2',
child: [
{ id: 'list1_2_1', text: 'Fully Automatic' },
{ id: 'list1_2_2', text: 'Semi Automatic' }
]
},
{
text: 'Air Conditioners',
id: 'list1_3',
child: [
{ id: 'list1_3_1', text: 'Inverter ACs' },
{ id: 'list1_3_2', text: 'Split ACs' },
{ id: 'list1_3_3', text: 'Window ACs' },
]
}
]
},
{
text: 'Accessories',
id: 'list2',
child: [
{
text: 'Mobile',
id: 'list2_1',
child: [
{ id: 'list2_1_1', text: 'Headphones' },
{ id: 'list2_1_2', text: 'Memory Cards' },
{ id: 'list2_1_3', text: 'Power Banks' }
]
},
{
text: 'Computer',
id: 'list2_2',
child: [
{ id: 'list2_2_1', text: 'Pendrives' },
{ id: 'list2_2_2', text: 'External Hard Disks' },
{ id: 'list2_2_3', text: 'Monitors' }
]
}
]
},
{
text: 'Fashion',
id: 'list3',
child: [
{ id: 'list3_1', text: 'Men' },
{ id: 'list3_2', text: 'Women' }
]
},
{
text: 'Home & Living',
id: 'list4',
child: [
{ id: 'list4_1', text: 'Furniture' },
{ id: 'list4_2', text: 'Decor' }
]
},
{
text: 'Entertainment',
id: 'list5',
child: [
{ id: 'list5_1', text: 'Televisions' },
{ id: 'list5_2', text: 'Home Theatres' },
{ id: 'list5_3', text: 'Gaming Laptops' }
]
}
];
const onSelect = (e) => {
if (e.data && !(e.data.child)) {
listview.value.ej2Instances.element.style.display = 'none';
document.getElementById('close').style.display = 'none';
}
};
const onClick = () => {
listview.value.ej2Instances.element.style.display = 'none';
document.getElementById('close').style.display = 'none';
};
const hamburgerClick = () => {
var element = listview.value.ej2Instances.element;
var animation = new Animation({ duration: 500 });
animation.animate(element, {
name: 'SlideDown',
begin: function () {
element.style.display = 'block';
document.getElementById('close').style.display = 'block';
}
});
};
</script>
<style>
@import "../node_modules/@syncfusion/ej2-base/styles/material.css";
@import "../node_modules/@syncfusion/ej2-navigations/styles/material.css";
@import "../node_modules/@syncfusion/ej2-lists/styles/material.css";
.layoutWrapper {
line-height: initial;
border: 1px solid black;
width: 285px;
height: 505px;
margin: auto;
margin-bottom: 15px;
border-radius: 28px;
position: relative;
background-image: linear-gradient(to top, #ffffff, #f5f5f5);
}
.layoutWrapper .speaker {
border: 1px solid black;
border-radius: 5px;
width: 33.33333333%;
height: 5px;
margin: 15px auto 0px auto;
position: relative;
}
.layoutWrapper .outerButton {
width: 30px;
height: 30px;
border: 1px solid black;
border-radius: 50%;
position: absolute;
bottom: calc(0% + 10px);
left: calc(50% - 15px);
}
.layoutWrapper .camera {
position: absolute;
left: calc(-15% - 10px);
top: -100%;
width: 10px;
height: 10px;
border-radius: 50%;
border: 1px solid black;
}
.layoutWrapper .layout {
border: 1px solid black;
margin: 20px 13px 0px 13px;
}
.layout #container {
height: 405px;
background-color: white;
}
#header {
width: 100%;
background-color: #7b8cfb;
}
.layout .e-listview .e-list-header,
.layout .e-listview .e-but-back {
background-color: #7b8cfb;
color: white;
}
#header .content {
background-color: #7b8cfb;
color: white;
border: none;
font-size: 20px;
line-height: 50px;
text-align: center;
}
#hamburger.menu {
font-size: 25px;
cursor: pointer;
float: left;
line-height: 50px;
position: absolute;
z-index: 1000;
left: 25px;
color: white;
}
#hamburger.menu:before {
content: '\e99a';
}
#listview {
position: absolute;
width: 257px;
overflow: hidden;
top: 43px;
left: 14px;
z-index: 1000;
}
#close:before {
content: "\e945";
}
#close {
position: absolute;
right: 25px;
color: white;
top: 60px;
z-index: 1000;
}
</style>
<template>
<div class="layoutWrapper">
<div class="speaker">
<div class="camera"></div>
</div>
<div class="layout">
<div id="container">
<div id="header">
<span id="hamburger" @click="hamburgerClick" class="e-icons menu default"></span>
<div class="content">Header</div>
</div>
<!-- ListView element -->
<ejs-listview ref="listview" :dataSource="dataSource" headerTitle="Menu" :showHeader="true" :select="onSelect"
tabindex="1" v-bind:style="{ display: 'none' }"></ejs-listview>
<span id="close" @click="onClick" class="e-icons" v-bind:style="{ display: 'none' }"></span>
</div>
</div>
<div class="outerButton"> </div>
</div>
</template>
<script>
import { ListViewComponent } from "@syncfusion/ej2-vue-lists";
import { enableRipple, Animation } from '@syncfusion/ej2-base';
enableRipple(true);
export default {
name: "App",
components: {
"ejs-listview": ListViewComponent
},
data: function () {
return {
dataSource: [
{
text: 'Appliances',
id: 'list1',
child: [
{
text: 'Kitchen',
id: 'list1_1',
child: [
{ id: 'list1_1_1', text: 'Electric Cookers' },
{ id: 'list1_1_2', text: 'Coffee Makers' },
{ id: 'list1_1_3', text: 'Blenders' },
]
},
{
text: 'Washing Machine',
id: 'list1_2',
child: [
{ id: 'list1_2_1', text: 'Fully Automatic' },
{ id: 'list1_2_2', text: 'Semi Automatic' }
]
},
{
text: 'Air Conditioners',
id: 'list1_3',
child: [
{ id: 'list1_3_1', text: 'Inverter ACs' },
{ id: 'list1_3_2', text: 'Split ACs' },
{ id: 'list1_3_3', text: 'Window ACs' },
]
}
]
},
{
text: 'Accessories',
id: 'list2',
child: [
{
text: 'Mobile',
id: 'list2_1',
child: [
{ id: 'list2_1_1', text: 'Headphones' },
{ id: 'list2_1_2', text: 'Memory Cards' },
{ id: 'list2_1_3', text: 'Power Banks' }
]
},
{
text: 'Computer',
id: 'list2_2',
child: [
{ id: 'list2_2_1', text: 'Pendrives' },
{ id: 'list2_2_2', text: 'External Hard Disks' },
{ id: 'list2_2_3', text: 'Monitors' }
]
}
]
},
{
text: 'Fashion',
id: 'list3',
child: [
{ id: 'list3_1', text: 'Men' },
{ id: 'list3_2', text: 'Women' }
]
},
{
text: 'Home & Living',
id: 'list4',
child: [
{ id: 'list4_1', text: 'Furniture' },
{ id: 'list4_2', text: 'Decor' }
]
},
{
text: 'Entertainment',
id: 'list5',
child: [
{ id: 'list5_1', text: 'Televisions' },
{ id: 'list5_2', text: 'Home Theatres' },
{ id: 'list5_3', text: 'Gaming Laptops' }
]
}
]
};
},
methods: {
onSelect: function (e) {
if (e.data && !(e.data.child)) {
this.$refs.listview.ej2Instances.element.style.display = 'none';
document.getElementById('close').style.display = 'none';
}
},
onClick: function (e) {
this.$refs.listview.ej2Instances.element.style.display = 'none';
document.getElementById('close').style.display = 'none';
},
hamburgerClick: function () {
var element = this.$refs.listview.ej2Instances.element;
var animation = new Animation({ duration: 500 });
animation.animate(element, {
name: 'SlideDown',
begin: function (args) {
element.style.display = 'block';
document.getElementById('close').style.display = 'block';
}
});
}
}
}
</script>
<style>
@import "../node_modules/@syncfusion/ej2-base/styles/material.css";
@import "../node_modules/@syncfusion/ej2-navigations/styles/material.css";
@import "../node_modules/@syncfusion/ej2-lists/styles/material.css";
.layoutWrapper {
line-height: initial;
border: 1px solid black;
width: 285px;
height: 505px;
margin: auto;
margin-bottom: 15px;
border-radius: 28px;
position: relative;
background-image: linear-gradient(to top, #ffffff, #f5f5f5);
}
.layoutWrapper .speaker {
border: 1px solid black;
border-radius: 5px;
width: 33.33333333%;
height: 5px;
margin: 15px auto 0px auto;
position: relative;
}
.layoutWrapper .outerButton {
width: 30px;
height: 30px;
border: 1px solid black;
border-radius: 50%;
position: absolute;
bottom: calc(0% + 10px);
left: calc(50% - 15px);
}
.layoutWrapper .camera {
position: absolute;
left: calc(-15% - 10px);
top: -100%;
width: 10px;
height: 10px;
border-radius: 50%;
border: 1px solid black;
}
.layoutWrapper .layout {
border: 1px solid black;
margin: 20px 13px 0px 13px;
}
.layout #container {
height: 405px;
background-color: white;
}
#header {
width: 100%;
background-color: #7b8cfb;
}
.layout .e-listview .e-list-header,
.layout .e-listview .e-but-back {
background-color: #7b8cfb;
color: white;
}
#header .content {
background-color: #7b8cfb;
color: white;
border: none;
font-size: 20px;
line-height: 50px;
text-align: center;
}
#hamburger.menu {
font-size: 25px;
cursor: pointer;
float: left;
line-height: 50px;
position: absolute;
z-index: 1000;
left: 25px;
color: white;
}
#hamburger.menu:before {
content: '\e99a';
}
#listview {
position: absolute;
width: 257px;
overflow: hidden;
top: 43px;
left: 14px;
z-index: 1000;
}
#close:before {
content: "\e945";
}
#close {
position: absolute;
right: 25px;
color: white;
top: 60px;
z-index: 1000;
}
</style>