<< BACK

Widgets & helpful things

Credits are appreciated but not needed!

Music Player

Track Name
Track Artist
00:00
00:00

Music player

<!-- HTML --> <div id="musicPanel"> <img id="musicImg" src="add your image here!"> <div id="miniplay"> <div class="stats"> <div class="track-art"></div> <div style="display:flex; flex-direction:column; overflow:hidden;"> <div class="track-name"><span class="scroll-text">Track Name</span></div> <div class="track-artist"><span class="scroll-text">Track Artist</span></div> </div> </div> <div class="slider_container"> <div class="current-time">00:00</div> <input type="range" min="0" max="100" value="0" class="seek_slider" onchange="seekTo()"> <div class="total-duration">00:00</div> </div> <div class="bttn"> <div class="prev-track" onclick="prevTrack()"><i class="fas fa-backward"></i></div> <div class="playpause-track" onclick="playpauseTrack()"><i class="fa fa-play fa-lg"></i></div> <div class="next-track" onclick="nextTrack()"><i class="fas fa-forward"></i></div> </div> </div> </div> /* CSS */ #musicPanel { position: relative; display: flex; align-items: center; transition: transform 0.6s ease; z-index: 9999; justify-content: center; } #musicImg { width: 90px; height: auto; border-radius: 6px; cursor: pointer; } #miniplay { width: 14em; height: 7em; background: url('add your image here!'); border: 1px solid #d6d6d6; border-radius: .5rem; padding: 8px; margin-left: 8px; font-size: 12px; opacity: 0.95; color: white; overflow: hidden; } .stats { display: flex; align-items:center; overflow:hidden; } .track-art { width: 3em; height: 3em; border-radius: 4px; background-image: url('add your image here!'); background-size: cover; background-position: center; transition: filter 0.3s ease; cursor: pointer; } .track-art:hover { filter: none; } .track-name, .track-artist { margin-left: 6px; font-size: 16px; white-space: nowrap; overflow: hidden; width: calc(100% - 6px); } .slider_container { display: flex; gap:4px; margin-top:6px; font-family: monospace; } .seek_slider::-webkit-slider-thumb, .seek_slider::-moz-range-thumb { background: url('add your image here!'); } .bttn { display:flex; gap:8px; justify-content:center; margin-top:6px; } .playpause-track, .prev-track, .next-track { opacity:.7; cursor:pointer; } .playpause-track:hover, .prev-track:hover, .next-track:hover { opacity:1; } // JS let track_art = document.querySelector(".track-art"); let track_name_el = document.querySelector(".track-name .scroll-text"); let track_artist_el = document.querySelector(".track-artist .scroll-text"); let playpause_btn = document.querySelector(".playpause-track"); let track_index = 0; let isPlaying = false; let curr_track = document.createElement('audio'); const track_list = [ { name: "Song 1", artist: "Artist", image: "add your image here!", path: "add your music file here!" }, { name: "Song 2", artist: "Artist", image: "add your image here!", path: "add your music file here!" } ]; function loadTrack(index) { curr_track.src = track_list[index].path; curr_track.load(); track_art.style.backgroundImage = "url(" + track_list[index].image + ")"; track_name_el.textContent = track_list[index].name; track_artist_el.textContent = track_list[index].artist; } function playpauseTrack() { if (!isPlaying) { curr_track.play(); isPlaying = true; playpause_btn.innerHTML = '<i class="fa fa-pause fa-lg"></i>'; } else { curr_track.pause(); isPlaying = false; playpause_btn.innerHTML = '<i class="fa fa-play fa-lg"></i>'; } } function nextTrack() { track_index = (track_index + 1) % track_list.length; loadTrack(track_index); if (isPlaying) curr_track.play(); } function prevTrack() { track_index = (track_index - 1 + track_list.length) % track_list.length; loadTrack(track_index); if (isPlaying) curr_track.play(); }


Corner player

<!-- HTML --> <div id="musicPanel"> <img id="musicImg" src="add your image here!"> <div id="miniplay"> <div class="stats"> <div class="track-art"></div> <div style="display:flex; flex-direction:column; overflow:hidden;"> <div class="track-name"><span class="scroll-text">Track Name</span></div> <div class="track-artist"><span class="scroll-text">Track Artist</span></div> </div> </div> <div class="slider_container"> <div class="current-time">00:00</div> <input type="range" min="0" max="100" value="0" class="seek_slider" onchange="seekTo()"> <div class="total-duration">00:00</div> </div> <div class="bttn"> <div class="prev-track" onclick="prevTrack()"><i class="fas fa-backward"></i></div> <div class="playpause-track" onclick="playpauseTrack()"><i class="fa fa-play fa-lg"></i></div> <div class="next-track" onclick="nextTrack()"><i class="fas fa-forward"></i></div> </div> </div> </div> /* CSS */ #musicPanel { position: fixed; bottom: 10px; right: 40px; display: flex; align-items: center; transform: translateX(230px); transition: transform 0.6s ease; z-index: 9999; } #musicPanel:hover { transform: translateX(12px); } #musicImg { width: 90px; height: auto; border-radius: 6px; cursor: pointer; } #miniplay { width: 14em; height: 7em; background: url('add your image here!'); border: 1px solid #d6d6d6; border-radius: .5rem; padding: 8px; margin-left: 8px; font-size: 12px; opacity: 0.95; color: white; overflow: hidden; } .stats { display: flex; align-items: center; overflow: hidden; } .track-art { width: 3em; height: 3em; border-radius: 4px; background: url('add your image here!'); background-size: cover; background-position: center; filter: brightness(0.75) contrast(0.68) saturate(0.75) sepia(0.75) hue-rotate(-10deg) contrast(1.1); transition: filter 0.3s ease; cursor: pointer; } .track-art:hover { filter: none; } .track-name, .track-artist { margin-left: 6px; font-size: 16px; font-family: "Jacquard 24", system-ui; white-space: nowrap; overflow: hidden; position: relative; width: calc(100% - 6px); } .scroll-text { display: inline-block; position: relative; } .slider_container { display: flex; align-items:center; gap:4px; margin-top:6px; font-family: monospace; font-size: 12px; } input.seek_slider::-webkit-slider-thumb, input.seek_slider::-moz-range-thumb { width: 24px; height: 24px; background: url('add your image here!') no-repeat center center; background-size: cover; border: none; border-radius: 50%; cursor: pointer; } .bttn { display:flex; gap:8px; justify-content:center; margin-top:6px; } .playpause-track, .prev-track, .next-track { opacity:0.7; cursor:pointer; transition:opacity 0.2s; } .playpause-track:hover, .prev-track:hover, .next-track:hover { opacity:1; } .playpause-track i, .prev-track i, .next-track i { color: white; } .track-name[title]:hover::after, .track-artist[title]:hover::after { content: attr(title); position: absolute; background: rgba(0,0,0,0.8); color: #fff; padding: 2px 6px; border-radius: 4px; white-space: nowrap; top: -25px; left: 0; font-size: 12px; pointer-events: none; } // JS let track_art = document.querySelector(".track-art"); let track_name_el = document.querySelector(".track-name .scroll-text"); let track_artist_el = document.querySelector(".track-artist .scroll-text"); let playpause_btn = document.querySelector(".playpause-track"); let track_index = 0; let isPlaying = false; let curr_track = document.createElement('audio'); const track_list = [ { name: "Song 1", artist: "Artist", image: "add your image here!", path: "add your music file here!" }, { name: "Song 2", artist: "Artist", image: "add your image here!", path: "add your music file here!" } ]; function loadTrack(index) { curr_track.src = track_list[index].path; curr_track.load(); track_art.style.backgroundImage = "url(" + track_list[index].image + ")"; track_name_el.textContent = track_list[index].name; track_artist_el.textContent = track_list[index].artist; } function playpauseTrack() { if (!isPlaying) { curr_track.play(); isPlaying = true; playpause_btn.innerHTML = '<i class="fa fa-pause fa-lg"></i>'; } else { curr_track.pause(); isPlaying = false; playpause_btn.innerHTML = '<i class="fa fa-play fa-lg"></i>'; } } function nextTrack() { track_index = (track_index + 1) % track_list.length; loadTrack(track_index); if (isPlaying) curr_track.play(); } function prevTrack() { track_index = (track_index - 1 + track_list.length) % track_list.length; loadTrack(track_index); if (isPlaying) curr_track.play(); }


Just interface

<!-- HTML --> <div id="musicPanel"> <div id="miniplay"> <div class="stats"> <div class="track-art"></div> <div style="display:flex; flex-direction:column; overflow:hidden;"> <div class="track-name"><span class="scroll-text">Track Name</span></div> <div class="track-artist"><span class="scroll-text">Track Artist</span></div> </div> </div> <div class="slider_container"> <div class="current-time">00:00</div> <input type="range" min="0" max="100" value="0" class="seek_slider" onchange="seekTo()"> <div class="total-duration">00:00</div> </div> <div class="bttn"> <div class="prev-track" onclick="prevTrack()"><i class="fas fa-backward"></i></div> <div class="playpause-track" onclick="playpauseTrack()"><i class="fa fa-play fa-lg"></i></div> <div class="next-track" onclick="nextTrack()"><i class="fas fa-forward"></i></div> </div> </div> </div> /* CSS */ #musicPanel { position: fixed; display: flex; align-items: center; transform: translateX(230px); transition: transform 0.6s ease; z-index: 9999; } #miniplay { width: 14em; height: 7em; background: url('add your image here!'); border: 1px solid #d6d6d6; border-radius: .5rem; padding: 8px; margin-left: 8px; font-size: 12px; opacity: 0.95; color: white; overflow: hidden; } .stats { display: flex; align-items: center; overflow: hidden; } .track-art { width: 3em; height: 3em; border-radius: 4px; background: url('add your image here!'); background-size: cover; background-position: center; filter: brightness(0.75) contrast(0.68) saturate(0.75) sepia(0.75) hue-rotate(-10deg) contrast(1.1); transition: filter 0.3s ease; cursor: pointer; } .track-art:hover { filter: none; } .track-name, .track-artist { margin-left: 6px; font-size: 16px; font-family: "Jacquard 24", system-ui; white-space: nowrap; overflow: hidden; position: relative; width: calc(100% - 6px); } .scroll-text { display: inline-block; position: relative; } .slider_container { display: flex; align-items:center; gap:4px; margin-top:6px; font-family: monospace; font-size: 12px; } input.seek_slider::-webkit-slider-thumb, input.seek_slider::-moz-range-thumb { width: 24px; height: 24px; background: url('add your image here!') no-repeat center center; background-size: cover; border: none; border-radius: 50%; cursor: pointer; } .bttn { display:flex; gap:8px; justify-content:center; margin-top:6px; } .playpause-track, .prev-track, .next-track { opacity:0.7; cursor:pointer; transition:opacity 0.2s; } .playpause-track:hover, .prev-track:hover, .next-track:hover { opacity:1; } .playpause-track i, .prev-track i, .next-track i { color: white; } .track-name[title]:hover::after, .track-artist[title]:hover::after { content: attr(title); position: absolute; background: rgba(0,0,0,0.8); color: #fff; padding: 2px 6px; border-radius: 4px; white-space: nowrap; top: -25px; left: 0; font-size: 12px; pointer-events: none; } // JS let track_art = document.querySelector(".track-art"); let track_name_el = document.querySelector(".track-name .scroll-text"); let track_artist_el = document.querySelector(".track-artist .scroll-text"); let playpause_btn = document.querySelector(".playpause-track"); let track_index = 0; let isPlaying = false; let curr_track = document.createElement('audio'); const track_list = [ { name: "Song 1", artist: "Artist", image: "add your image here!", path: "add your music file here!" }, { name: "Song 2", artist: "Artist", image: "add your image here!", path: "add your music file here!" } ]; function loadTrack(index) { curr_track.src = track_list[index].path; curr_track.load(); track_art.style.backgroundImage = "url(" + track_list[index].image + ")"; track_name_el.textContent = track_list[index].name; track_artist_el.textContent = track_list[index].artist; } function playpauseTrack() { if (!isPlaying) { curr_track.play(); isPlaying = true; playpause_btn.innerHTML = '<i class="fa fa-pause fa-lg"></i>'; } else { curr_track.pause(); isPlaying = false; playpause_btn.innerHTML = '<i class="fa fa-play fa-lg"></i>'; } } function nextTrack() { track_index = (track_index + 1) % track_list.length; loadTrack(track_index); if (isPlaying) curr_track.play(); } function prevTrack() { track_index = (track_index - 1 + track_list.length) % track_list.length; loadTrack(track_index); if (isPlaying) curr_track.play(); }

Calendar

(PS: Yours will update per month. This one is just an example!)

SunMonTueWed ThuFriSat
Early release
Important date
Test/quiz
Day off

<!-- HTML --> <div class="container"> <div class="calendar"> <h2 id="cal-title"></h2> <table> <thead> <tr> <th>Sun</th><th>Mon</th><th>Tue</th><th>Wed</th> <th>Thu</th><th>Fri</th><th>Sat</th> </tr> </thead> <tbody id="cal-body"></tbody> </table> </div> <div class="icons"> <div data-icon="earlyrelease"> <img src="[ADD IMG HERE]" /> Early release </div> <div data-icon="test"> <img src="[ADD IMG HERE]" /> Important date <span style="font-size: 11px;" title="Hover on the icon to see information about the important date!">ⓘ</span> </div> <div data-icon="event"> <img src="[ADD IMG HERE]" /> Test/quiz </div> <div data-icon="dayoff"> <img src="[ADD IMG HERE]" /> Day off </div> <iframe src="[Go to https://www.timeanddate.com/ to get an embedded custom clock with your local time!]" frameborder="0" width="110" height="110" style="margin-top: 18px; margin-left: 20px;"> </iframe> <iframe src="[Go to https://www.timeanddate.com/ to get an embedded custom clock with your local time!]" frameborder="0" width="57" height="19" style="margin-top: -2px; margin-left: 48px;"> </iframe> </div> </div> /* CSS */ .container { display: flex; gap: 40px; background: #fffaf3; border: 2px solid #d6cdba; padding: 20px; box-shadow: 0 4px 10px rgba(0,0,0,0.1); width: 93%; } .day { position: relative; font-family: "Give You Glory", cursive; } .day img.icon { width: 20px; height: 20px; position: absolute; bottom: 5px; right: 5px; opacity: 0.85; } .calendar { width: 70%; text-align: center; font-family: "Give You Glory", cursive; } .calendar h2 { margin-bottom: 10px; font-weight: 600; color:#5c4a38; } .calendar table { width: 100%; border-collapse: collapse; } .calendar th { padding: 6px; font-weight: 600; color: #6b5d4d; } .calendar td { padding: 10px; border: 1px solid #e0d6c6; height: 40px; cursor: pointer; position: relative; } .calendar td:hover { background: #f0eae2; } .calendar td.today { background: #e7ddcb; box-shadow: inset 0 0 5px #b59e84; font-weight: bold; } .icon { position: absolute; bottom: 2px; right: 2px; width: 20px; height: 20px; } .icons { width: 140px; display: flex; flex-direction: column; gap: 20px; } .icons div { display: flex; align-items: center; gap: 8px; } .icons img { width: 28px; height: 28px; } // JS <script> const presetIcons = { 17: "[ADD IMG HERE]", 22: "[ADD IMG HERE]", 23: "[ADD IMG HERE]", 24: "[ADD IMG HERE]", 25: "[ADD IMG HERE]", 26: "[ADD IMG HERE]", 27: "[ADD IMG HERE]", 28: "[ADD IMG HERE]", 29: "[ADD IMG HERE]", 30: "[ADD IMG HERE]", 31: "[ADD IMG HERE]", 5: "[ADD IMG HERE]", 10: "[ADD IMG HERE]", 11: "[ADD IMG HERE]" }; const presetTitles = { 10: "", 11: "", 5: "", 25: "", 31: "" }; function generateCalendar() { const now = new Date(); const month = now.getMonth(); const year = now.getFullYear(); const monthNames = [ "January","February","March","April","May","June", "July","August","September","October","November","December" ]; document.getElementById("cal-title").textContent = monthNames[month] + " " + year; const body = document.getElementById("cal-body"); body.innerHTML = ""; const firstDay = new Date(year, month, 1).getDay(); const daysInMonth = new Date(year, month + 1, 0).getDate(); let row = document.createElement("tr"); for (let i = 0; i < firstDay; i++) { row.appendChild(document.createElement("td")); } for (let day = 1; day <= daysInMonth; day++) { const cell = document.createElement("td"); cell.textContent = day; if (day === now.getDate()) { cell.classList.add("today"); } if (presetIcons[day]) { const img = document.createElement("img"); img.src = presetIcons[day]; img.className = "icon"; cell.appendChild(img); } if (presetTitles[day]) { cell.title = presetTitles[day]; } row.appendChild(cell); if ((firstDay + day) % 7 === 0) { body.appendChild(row); row = document.createElement("tr"); } } if (row.children.length > 0) { body.appendChild(row); } } generateCalendar(); </script>

Readable font button

<!-- HTML --> <button id="fontBtn">Readable Font: OFF</button> /* CSS */ #fontBtn { background: linear-gradient(180deg,#fff,#f8f4ea); border:1px solid rgba(0,0,0,0.05); gap:10px; padding:5px 8px; font-size:0.96rem; border: none; cursor: pointer; transition: transform var(--transition), box-shadow var(--transition), background-color var(--transition), color var(--transition); box-shadow: 0 2px 6px rgba(0,0,0,0.04); user-select: none; -webkit-tap-highlight-color: transparent; margin-left: 10px; margin-top: 10px; font-size: 11px; } // JS <script> const readableFont = "Verdana, Geneva, sans-serif"; const originalFonts = new Map(); let readableMode = false; document.getElementById("fontBtn").onclick = () => { const paragraphs = document.querySelectorAll("p"); if (!readableMode) { paragraphs.forEach(p => { if (!originalFonts.has(p)) { originalFonts.set(p, window.getComputedStyle(p).fontFamily); } p.style.fontFamily = readableFont; }); readableMode = true; document.getElementById("fontBtn").textContent = "Readable Font: ON"; } else { paragraphs.forEach(p => { if (originalFonts.has(p)) { p.style.fontFamily = originalFonts.get(p); } }); readableMode = false; document.getElementById("fontBtn").textContent = "Readable Font: OFF"; } }; </script>

Helpful Websites!

I've already put these in my "letter opener" page, but, for the sake of this page, I shall put them here, too.


 Atabook for their guestbook

★ Blinkie cafe to make blinkies

★ 98.css for their Windows 98 CSS interfaces

★ Style my tooltips for their jQuery plugin that styles tooltips

★ Wilardo for their image resources

★ Silly pixels for their pixels

★ Pngs for snails for their pngs

 Cbox for their chat box

★ Randombullshitgo for their borders

★ Monsieur for their music player

 RV's effects for their free Javascript/DHTML effects

★ Front Bumper Stickers for their internet bumper stickers

 Web badges for their web badges

★ Gifypet to make a personal website pet

 Cool Text for their text graphics generator

 Fluffmoth's id buttons for their id buttons

★ Glitter graphics for their graphics

★ Marasunder for their pngs

★ Kaomojikuma for their kaomojis

 Thousandautumns for their miniature pride flags

 Quain for their endless resources

★ Koska for their stamps

 Scripted for their codes, links and resources

★ Jsfxr for their sound effects

★ Lukasworkshop for their corner pet creator

★ Housepen for their resources

★ ブログパーツ for their calendar