grapesjs实现可视化自定义菜单面板多网页设计器代码

代码语言:html

所属分类:其他

代码描述:grapesjs实现可视化自定义菜单面板多网页设计器代码,可新增和删除页面,切换页面,可视化编辑。

代码标签: grapes 可视化 网页 设计器 代码 面板 菜单 自定义

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="en">
<head>
   
<meta charset="UTF-8">
   
<meta name="viewport" content="width=device-width, initial-scale=1.0">
   
<title>GrapesJS Website Builder </title>
<link type="text/css" rel="stylesheet" href="//repo.bfw.wiki/bfwrepo/css/grapes.0.21.9.css">
<link type="text/css" rel="stylesheet" href="//repo.bfw.wiki/bfwrepo/css/all.5.15.3.css">
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/grapes.0.21.9.js"></script>
   
<style>
        body
, html {
           
margin: 0;
           
height: 100%;
           
font-family: Arial, sans-serif;
           
background-color: #1e1e1e;
           
color: #f0f0f0;
             
       
}
        body
.dark-mode {
         
       
}
       
#gjs {
           
height: calc(100vh - 40px);
       
}
       
.panel__top {
           
padding: 0;
           
width: 100%;
           
display: flex;
           
position: initial;
           
justify-content: space-between;
           
background-color: #2c2c2c;
           
color: #fff;
       
}
       
.panel__basic-actions {
           
position: initial;
           
padding: 0 10px;
       
}
       
.panel__devices {
           
position: initial;
       
}
       
.panel__switcher {
           
position: initial;
       
}
       
.editor-row {
           
display: flex;
           
justify-content: flex-start;
           
align-items: stretch;
           
flex-wrap: nowrap;
           
height: calc(100% - 40px);
       
}
       
.editor-canvas {
           
flex-grow: 1;
           
height: 100%;
       
}
       
.panel__left {
           
flex-basis: 230px;
           
position: relative;
           
overflow-y: auto;
           
background-color: #2c2c2c;
       
}
       
.panel__right {
           
flex-basis: 280px;
           
position: relative;
           
overflow-y: auto;
           
background-color: #2c2c2c;
       
}
       
.panel__left-header,
       
.panel__right-header {
           
background-color: #3c3c3c;
           
padding: 10px;
           
font-weight: bold;
       
}
       
.blocks-container,
       
.pages-container,
       
.layers-container,
       
.styles-container,
       
.traits-container {
           
padding: 10px;
       
}
       
.gjs-block {
           
width: 100%;
           
height: auto;
           
min-height: 40px;
           
margin: 5px 0;
           
cursor: move;
           
text-align: center;
           
color: #f0f0f0;
           
background-color: #3c3c3c;
       
}
       
.panel__top button {
           
background: none;
           
border: none;
           
color: white;
           
padding: 10px;
           
cursor: pointer;
           
font-size: 16px;
       
}
       
.panel__top button:hover {
           
background-color: #4c4c4c;
       
}
       
.gjs-pn-btn.fa {
           
font-size: 16px;
           
padding: 10px;
       
}
       
.tab-buttons {
           
display: flex;
           
background-color: #3c3c3c;
       
}
       
.tab-button {
           
flex: 1;
           
padding: 10px;
           
background: none;
           
border: none;
           
cursor: pointer;
           
font-size: 14px;
           
font-weight: bold;
           
color: #f0f0f0;
       
}
       
.tab-button.active {
           
background-color: #4c4c4c;
           
border-bottom: 2px solid #007bff;
       
}
       
.tab-content {
           
display: none;
       
}
       
.tab-content.active {
           
display: block;
       
}
       
#page-list li {
           
cursor: pointer;
           
padding: 5px;
           
margin: 5px 0;
           
background-color: #3c3c3c;
           
border-radius: 3px;
       
}
       
#page-list li.active {
           
background-color: #007bff;
           
color: white;
       
}
       
#page-selector {
           
background-color: #3c3c3c;
           
color: #f0f0f0;
           
border: none;
           
padding: 5px;
           
margin: 5px 0;
           
width: 100%;
       
}
       
#dark-mode-toggle {
           
background: none;
           
border: none;
           
color: #f0f0f0;
           
cursor: pointer;
           
font-size: 16px;
           
padding: 10px;
       
}
   
</style>
</head>
<body>
   
<div class="panel__top">
       
<div class="panel__basic-actions">
           
<button id="show-json"><i class="fas fa-code"></i> JSON</button>
           
<button id="show-html"><i class="fas fa-file-code"></i> HTML</button>
           
<button id="show-css"><i class="fas fa-file-alt"></i> CSS</button>
       
</div>
       
<div class="panel__devices"></div>
       
<div class="panel__switcher"></div>
       
<button id="dark-mode-toggle"><i class="fas fa-moon"></i></button>
   
</div>
   
<div class="editor-row">
       
<div class="panel__left">
           
<div class="tab-buttons">
               
<button class="tab-button active" data-tab="elements"><i class="fas fa-th-large"></i> Elements</button>
               
<button class="tab-button" data-tab="pages"><i class="fas fa-file"></i> Pages</button>
           
</div>
           
<div id="elements-tab" class="tab-content active">
               
<div class="blocks-container"></div>
           
</div>
           
<div id="pages-tab" class="tab-content">
               
<div class="pages-container">
                   
<button id="add-page">Add New Page</button>
                   
<select id="page-selector"></select>
               
</div>
           
</div>
       
</div>
       
<div class="editor-canvas">
           
<div id="gjs"></div>
       
</div>
       
<div class="panel__right">
           
<div class="panel__right-header">
                Settings
           
</div>
           
<div class="layers-container"></div>
           
<div class="styles-container"></div>
           
<div class="traits-container"></div>
       
</div>
   
</div>

   
<script>
        document.addEventListener('DOMContentLoaded', function() {
            let currentPage = null;
            let db;

            const editor = grapesjs.init({
                container: '#gjs',
                height: '100%',
                width: 'auto',
                storageManager: false,
                panels: { defaults: [] },
                blockManager: {
                    appendTo: '.blocks-container',
                },
                layerManager: {
                    appendTo: '.layers-container'
                },
                styleManager: {
                    appendTo: '.styles-container',
                },
                traitManager: {
                    appendTo: '.traits-container',
                },
               
                deviceManager: {
                    devices: [
                        { name: 'Desktop', width: '' },
                        { name: 'Tablet', width: '768px', widthMedia: '992px' },
                        { name: 'Mobile', width: '320px', widthMedia: '480px' }
                    ]
                },
            });

            // Initialize IndexedDB
            const dbName = 'WebsiteBuilderDB';
            const dbVersion = 1;
            const request = indexedDB.open(dbName, dbVersion);

            request.onerror = function(event) {
                console.error("IndexedDB error:", event.target.error);
            };

            request.onsuccess = function(event) {
                db = event.target.result;
                console.log("IndexedDB initialized successfully");
                loadPages();
            };

            request.onupgradeneeded = function(event) {
                db = event.target.result;
                const objectStore = db.createObjectStore("pages", { keyPath: "name" });
                objectStore.createI.........完整代码请登录后点击上方下载按钮下载查看

网友评论0