mirror of
https://github.com/ghndrx/webos.git
synced 2026-02-09 22:35:06 +00:00
Add working Start menu with app launcher
This commit is contained in:
@@ -312,10 +312,105 @@ body {
|
||||
background: rgba(255, 255, 255, 0.1);
|
||||
}
|
||||
|
||||
.start-button.active {
|
||||
background: rgba(255, 255, 255, 0.15);
|
||||
}
|
||||
|
||||
.start-button i {
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
/* Start Menu */
|
||||
.start-menu {
|
||||
position: absolute;
|
||||
bottom: 55px;
|
||||
left: 10px;
|
||||
width: 280px;
|
||||
background: rgba(15, 15, 35, 0.98);
|
||||
backdrop-filter: blur(20px);
|
||||
border-radius: 12px;
|
||||
border: 1px solid var(--border);
|
||||
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.5);
|
||||
display: none;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.start-menu.open {
|
||||
display: block;
|
||||
animation: slideUp 0.2s ease;
|
||||
}
|
||||
|
||||
@keyframes slideUp {
|
||||
from {
|
||||
opacity: 0;
|
||||
transform: translateY(10px);
|
||||
}
|
||||
to {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
|
||||
.start-menu-header {
|
||||
padding: 20px;
|
||||
background: linear-gradient(135deg, var(--accent) 0%, var(--accent-secondary) 100%);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.start-menu-header i {
|
||||
font-size: 32px;
|
||||
}
|
||||
|
||||
.start-menu-header span {
|
||||
font-weight: 600;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.start-menu-items {
|
||||
padding: 10px 0;
|
||||
}
|
||||
|
||||
.start-menu-item {
|
||||
padding: 12px 20px;
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 12px;
|
||||
transition: background 0.2s;
|
||||
}
|
||||
|
||||
.start-menu-item:hover {
|
||||
background: rgba(255, 255, 255, 0.1);
|
||||
}
|
||||
|
||||
.start-menu-item i {
|
||||
width: 20px;
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
.start-menu-footer {
|
||||
padding: 15px 20px;
|
||||
border-top: 1px solid var(--border);
|
||||
display: flex;
|
||||
gap: 20px;
|
||||
}
|
||||
|
||||
.start-menu-footer a {
|
||||
color: var(--text-secondary);
|
||||
text-decoration: none;
|
||||
font-size: 13px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
transition: color 0.2s;
|
||||
}
|
||||
|
||||
.start-menu-footer a:hover {
|
||||
color: var(--accent);
|
||||
}
|
||||
|
||||
.taskbar-items {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
|
||||
17
index.html
17
index.html
@@ -42,6 +42,23 @@
|
||||
<i class="fas fa-circle"></i>
|
||||
<span>Start</span>
|
||||
</div>
|
||||
<div class="start-menu" id="start-menu">
|
||||
<div class="start-menu-header">
|
||||
<i class="fas fa-user-circle"></i>
|
||||
<span>Greg Hendrickson</span>
|
||||
</div>
|
||||
<div class="start-menu-items">
|
||||
<div class="start-menu-item" data-window="about"><i class="fas fa-user"></i> About Me</div>
|
||||
<div class="start-menu-item" data-window="projects"><i class="fas fa-folder"></i> Projects</div>
|
||||
<div class="start-menu-item" data-window="resume"><i class="fas fa-file-alt"></i> Resume</div>
|
||||
<div class="start-menu-item" data-window="contact"><i class="fas fa-envelope"></i> Contact</div>
|
||||
<div class="start-menu-item" data-window="terminal"><i class="fas fa-terminal"></i> Terminal</div>
|
||||
</div>
|
||||
<div class="start-menu-footer">
|
||||
<a href="https://github.com/ghndrx" target="_blank"><i class="fab fa-github"></i> GitHub</a>
|
||||
<a href="https://linkedin.com" target="_blank"><i class="fab fa-linkedin"></i> LinkedIn</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="taskbar-items"></div>
|
||||
<div class="system-tray">
|
||||
<span class="clock"></span>
|
||||
|
||||
30
js/app.js
30
js/app.js
@@ -12,6 +12,7 @@ class GregOS {
|
||||
this.bindIconClicks();
|
||||
this.startClock();
|
||||
this.setupTerminal();
|
||||
this.setupStartMenu();
|
||||
}
|
||||
|
||||
bindIconClicks() {
|
||||
@@ -211,6 +212,35 @@ class GregOS {
|
||||
setInterval(updateClock, 1000);
|
||||
}
|
||||
|
||||
setupStartMenu() {
|
||||
const startButton = document.querySelector('.start-button');
|
||||
const startMenu = document.getElementById('start-menu');
|
||||
|
||||
startButton.addEventListener('click', (e) => {
|
||||
e.stopPropagation();
|
||||
startMenu.classList.toggle('open');
|
||||
startButton.classList.toggle('active');
|
||||
});
|
||||
|
||||
// Close menu when clicking elsewhere
|
||||
document.addEventListener('click', (e) => {
|
||||
if (!startMenu.contains(e.target) && !startButton.contains(e.target)) {
|
||||
startMenu.classList.remove('open');
|
||||
startButton.classList.remove('active');
|
||||
}
|
||||
});
|
||||
|
||||
// Start menu item clicks
|
||||
document.querySelectorAll('.start-menu-item').forEach(item => {
|
||||
item.addEventListener('click', () => {
|
||||
const windowId = item.dataset.window;
|
||||
this.openWindow(windowId);
|
||||
startMenu.classList.remove('open');
|
||||
startButton.classList.remove('active');
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
setupTerminal() {
|
||||
document.addEventListener('keydown', (e) => {
|
||||
const input = document.getElementById('terminal-input');
|
||||
|
||||
Reference in New Issue
Block a user