SlabText Big & Bold Responsive Headline for jQuery. In an effort to not have a jQuery or Vanilla, etc. dependency attempting to re-implement in just plain JS.
A Pen by molotov.bliss on CodePen.
| <html> | |
| <body> | |
| <head></head> | |
| <h1 style="color:#00ff69">molotov.bliss</h1> | |
| <hr> | |
| <h1>BACKGROUND</h1> | |
| <hr> | |
| <img src="https://www.dropbox.com/s/jwvdexm63prx1oh/mb-newlogo.png?dl=1" style="width: 500px; padding-bottom: 100px;" /> | |
| <div id="blob"> | |
| <svg viewBox="0 0 200 200" style="z-index: -2"> | |
| <defs> | |
| <linearGradient id="gradient" gradientTransform="rotate(90)"> | |
| <stop id="gradientStop1" offset="0%" stop-color="var(--startColor)" /> | |
| <stop id="gradientStop2 " offset="100%" stop-color="var(--stopColor)" /> | |
| </linearGradient> | |
| </defs> | |
| <path d="" fill="url('#gradient')"></path> | |
| </svg> | |
| </div> | |
| <h1> | |
| B00MER, [boomer the bass pig (early alias)], Bliss Productions, 2TryP2 (2T2) | |
| Kosmic Free Music Foundation (KFMF) AKA Kosmic Loader Foundation (KLF) 1994-2000, Relic, Integrity (INT), Paramount (PMT) | |
| Background (Circa January 1991-1992) | |
| Before the Internet boom, dialing into local BBS’s at 2400-9600 baud & even running a small local board with Oblivion/2 BBS. Eventually moving onto the internet via a SLIP/PPP shell account shared by a friend when the internet was still in its infancy. (Web was nothing more than plain text with Gopher/Lynx/IRCII/etc.) Becoming friends with other like minded individuals on IRC especially #trax on EFNet that were also into trackers and the demo scene. | |
| After learning to create ANSI Art with theDraw, and digital artworks with Deluxe Paint 2e. Eventually moving to Audio Production after seeing a Demo for Tetra Compositor by Bram Graveland Ultraforce in 1992 that was included with a Creative Labs Sound Blaster 8bit mono card. Eventually finding other Tracker Software such as Fast Tracker 2 by Triton, Scream Tracker from Future Crew, Farandole by Daniel Potter (local friend via BBS LAN Parties) & eventually Impulse Tracker by Jeffrey Liam. | |
| Previously a part of one of the very first net-labels: Kosmic Free Music Foundation or KFMF, (1994-2000). Still producing today. Releasing most tracks for free via Soundcloud and other channels independently. My current choice of Digital Audio Workstations/Tracker is <u>ReNoise</u>. | |
| </h1> | |
| <a href="http://molotovbliss.com/">http://molotovbliss.com</a> | |
| https://soundcloud.com/molotovbliss | |
| https://www.pouet.net/user.php?who=99211 | |
| http://amp.dascene.net/detail.php?detail=modules&view=754 | |
| https://hornet.org/cgi-bin/scene-search.cgi?search=B00mer | |
| https://hornet.org/cgi-bin/scene-search.cgi?search=Boomer | |
| </body> | |
| </html> |
SlabText Big & Bold Responsive Headline for jQuery. In an effort to not have a jQuery or Vanilla, etc. dependency attempting to re-implement in just plain JS.
A Pen by molotov.bliss on CodePen.
| import { spline } from "https://cdn.skypack.dev/@georgedoescode/[email protected]"; | |
| import SimplexNoise from "https://cdn.skypack.dev/[email protected]"; | |
| // our <path> element | |
| const path = document.querySelector("path"); | |
| // used to set our custom property values | |
| const root = document.documentElement; | |
| let hueNoiseOffset = 0; | |
| let noiseStep = 0.005; | |
| const simplex = new SimplexNoise(); | |
| const points = createPoints(); | |
| (function animate() { | |
| path.setAttribute("d", spline(points, 1, true)); | |
| // for every point... | |
| for (let i = 0; i < points.length; i++) { | |
| const point = points[i]; | |
| // return a pseudo random value between -1 / 1 based on this point's current x, y positions in "time" | |
| const nX = noise(point.noiseOffsetX, point.noiseOffsetX); | |
| const nY = noise(point.noiseOffsetY, point.noiseOffsetY); | |
| // map this noise value to a new value, somewhere between it's original location -20 and it's original location + 20 | |
| const x = map(nX, -1, 1, point.originX - 20, point.originX + 20); | |
| const y = map(nY, -1, 1, point.originY - 20, point.originY + 20); | |
| // update the point's current coordinates | |
| point.x = x; | |
| point.y = y; | |
| // progress the point's x, y values through "time" | |
| point.noiseOffsetX += noiseStep; | |
| point.noiseOffsetY += noiseStep; | |
| } | |
| const hueNoise = noise(hueNoiseOffset, hueNoiseOffset); | |
| const hue = map(hueNoise, -1, 1, 0, 360); | |
| root.style.setProperty("--startColor", `hsl(${hue}, 100%, 75%)`); | |
| root.style.setProperty("--stopColor", `hsl(${hue + 60}, 100%, 75%)`); | |
| //document.body.style.background = `hsl(${hue + 60}, 75%, 5%)`; | |
| hueNoiseOffset += noiseStep / 6; | |
| requestAnimationFrame(animate); | |
| })(); | |
| function map(n, start1, end1, start2, end2) { | |
| return ((n - start1) / (end1 - start1)) * (end2 - start2) + start2; | |
| } | |
| function noise(x, y) { | |
| return simplex.noise2D(x, y); | |
| } | |
| function createPoints() { | |
| const points = []; | |
| // how many points do we need | |
| const numPoints = 6; | |
| // used to equally space each point around the circle | |
| const angleStep = (Math.PI * 2) / numPoints; | |
| // the radius of the circle | |
| const rad = 75; | |
| for (let i = 1; i <= numPoints; i++) { | |
| // x & y coordinates of the current point | |
| const theta = i * angleStep; | |
| const x = 100 + Math.cos(theta) * rad; | |
| const y = 100 + Math.sin(theta) * rad; | |
| // store the point's position | |
| points.push({ | |
| x: x, | |
| y: y, | |
| // we need to keep a reference to the point's original point for when we modulate the values later | |
| originX: x, | |
| originY: y, | |
| // more on this in a moment! | |
| noiseOffsetX: Math.random() * 1000, | |
| noiseOffsetY: Math.random() * 1000 | |
| }); | |
| } | |
| return points; | |
| } | |
| document.querySelector("path").addEventListener("mouseover", () => { | |
| noiseStep = 0.01; | |
| }); | |
| document.querySelector("path").addEventListener("mouseleave", () => { | |
| noiseStep = 0.005; | |
| }); | |
| //the plugin is included as an external resource to this pen | |
| // source: https://freqdec.github.io/slabText/js/jquery.slabtext.min.js | |
| $("h1").slabText({ | |
| viewportBreakpoint: 380 | |
| }); |
| <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> | |
| <script src="https://cdnjs.cloudflare.com/ajax/libs/slabText/2.3/jquery.slabtext.min.js"></script> |
| @import url(https://fonts.googleapis.com/css?family=Oswald:400,700); | |
| body { | |
| background-color: #000; | |
| color: #444; | |
| font-family: "Oswald", sans-serif; | |
| padding: 30px; | |
| font-size: 100%; | |
| text-align: center; | |
| } | |
| h1 { | |
| text-transform: uppercase; | |
| font-size: 4em; | |
| line-height: 0.9; | |
| } | |
| .slabtexted .slabtext { | |
| display: -moz-inline-box; | |
| display: inline-block; | |
| white-space: nowrap; | |
| } | |
| .slabtextinactive .slabtext { | |
| display: inline; | |
| white-space: normal; | |
| font-size: 1em !important; | |
| letter-spacing: inherit !important; | |
| word-spacing: inherit !important; | |
| *letter-spacing: 0 !important; | |
| *word-spacing: 0 !important; | |
| } | |
| .slabtextdone .slabtext { | |
| display: block; | |
| } | |
| :root { | |
| --startColor: hsl(0, 100%, 75%); | |
| --stopColor: hsl(0, 100%, 75%); | |
| } | |
| * { | |
| margin: 0; | |
| padding: 0; | |
| box-sizing: border-box; | |
| } | |
| body { | |
| height: 100vh; | |
| display: grid; | |
| place-items: center; | |
| } | |
| svg { | |
| width: 90vmin; | |
| height: 90vmin; | |
| } | |
| path { | |
| cursor: pointer; | |
| } | |
| p { | |
| position: absolute; | |
| font-size: 1.125rem; | |
| font-weight: 500; | |
| bottom: 1rem; | |
| right: 1rem; | |
| color: #fff; | |
| font-family: system-ui, sans-serif; | |
| -webkit-font-smoothing: antialiased; | |
| -moz-osx-font-smoothing: grayscale; | |
| } | |
| #blob { | |
| position: absolute; | |
| top: -10%; | |
| z-index: -1; | |
| } | |
| hr { | |
| width: 100%; | |
| color: white; | |
| } |