UNPKG

@i-is-as-i-does/valva

Version:

Vâlvă is a small JS library for elegant transitions.

250 lines (223 loc) 5.47 kB
/* Vâlvă --demo | (c) 2021 I-is-as-I-does | MIT License */ function getHeader(text, num = 2) { let hd = document.createElement("H" + num); hd.textContent = text; return hd; } function getLabel(text) { let lab = document.createElement("LABEL"); lab.textContent = text; return lab; } function getNumInp(val = 200) { var inp = document.createElement("INPUT"); inp.type = "number"; inp.value = val; return inp; } function getCheckbox() { var ck = document.createElement("INPUT"); ck.type = "checkbox"; return ck; } function getBtn(text) { var btn = document.createElement("BUTTON"); btn.textContent = text; return btn; } function getDiv(text) { var div = document.createElement("DIV"); div.textContent = text; return div; } function getOption(text) { var opt = document.createElement("OPTION"); opt.textContent = text; return opt; } function genText() { var content = "I'm an element of random height. "; var num = randomInt(10, 25); return content.repeat(num); } function getLi(text) { var li = document.createElement("LI"); li.textContent = text; return li; } function getcallback(txt) { var sp = document.createElement("SPAN"); sp.textContent = txt; return sp; } function randomInt(min, max) { return Math.floor(Math.random() * (max - min + 1) + min); } function getSelect() { var select = document.createElement("SELECT"); return select; } var rdnElm = getDiv(genText()); var select1 = getSelect(); var anmtn = [ "easeToggle", "timedEaseToggle", "easeIn", "easeOut", "slideToggle", "timedSlideToggle", "slideDown", "slideUp", "fadeToggle", "timedFadeToggle", "fadeIn", "fadeOut" ]; anmtn.forEach((am) => { select1.append(getOption(am)); }); var duratinp = getNumInp(400); var delayinp = getNumInp(800); delayinp.disabled = true; var callbackinp = getCheckbox(); var tranbtn = getBtn("Trigger"); var callbackbox = document.createElement("DIV"); callbackbox.append(getcallback("...")); var callbt = ["I'm a callback!", "But you, what are you?"]; var ci = 0; var fCallback = function () { var idx = ci; ci = 0; if (idx === 0) { ci = 1; } Valva.replaceDiversion(callbackbox.firstChild, getcallback(callbt[idx])); }; var anim = select1.options[0].text; select1.addEventListener("change", function () { anim = select1.options[select1.selectedIndex].text; if (anim.includes("ade")) { duratinp.disabled = true; } else { duratinp.disabled = false; } if (anim.substr(0, 4) === "time") { delayinp.disabled = false; } else { delayinp.disabled = true; } }); tranbtn.addEventListener("click", function () { if (anim) { var dely = false; if (!delayinp.disabled) { dely = delayinp.value; } var callb = null; if (callbackinp.checked) { callb = fCallback; } if (duratinp.disabled) { if (dely !== false) { return Valva[anim](rdnElm, dely, callb); } return Valva[anim](rdnElm, callb); } var durt = duratinp.value; if (dely !== false) { return Valva[anim](rdnElm, durt, dely, callb); } return Valva[anim](rdnElm, durt, callb); } }); var list = document.createElement("UL"); list.append(getLi("I'm a list item")); var select2 = getSelect(); ["Prepend", "Append"].forEach((ac) => { select2.append(getOption(ac)); }); var easeBox = getCheckbox(); var divrbtn = getBtn("Insert"); var lic = 0; var diversion = null; divrbtn.addEventListener("click", function () { diversion = select2.options[select2.selectedIndex].text; if (diversion) { var ease = easeBox.checked; lic++; if (diversion == "Append") { Valva.insertDiversion( list, getLi("I'm just another list item"), false, ease, 400 ); } else { Valva.insertDiversion( list, getLi("I'm a list item, again"), true, ease, 400 ); } } }); var replcbtn = getBtn("Replace"); replcbtn.addEventListener("click", function () { Valva.replaceDiversion( list.childNodes[randomInt(0, lic)], getLi("I'm a new list item!"), 200 ); }); var spFlidx = 1; var spFlTexts = [ "A Little from Column A, a Little from Column B", "A Day Late and a Dollar Short", "Fight Fire With Fire", "Wake Up Call", "It's Not All It's Cracked Up To Be", "Keep Your Eyes Peeled", ]; var splitFlapdiv = getDiv(spFlTexts[0]); var splitFlapbtn = getBtn("SplitFlap"); var splitFlapinpt = getNumInp(20); splitFlapbtn.addEventListener("click", function () { var text = spFlTexts[spFlidx]; spFlidx++; if (spFlidx === 6) { spFlidx = 0; } Valva.splitFlap(splitFlapdiv, text, splitFlapinpt.value); }); var wrap = getDiv() wrap.append( getLabel("Animation"), select1, getLabel("Duration"), duratinp, getLabel("Delay"), delayinp, getLabel("Callback"), callbackinp, tranbtn, callbackbox,) document.body.append( getHeader("Vâlvă", 1), getHeader("Fade Slide Ease", 2), rdnElm, wrap, getHeader("Append Prepend Replace", 2), list, select2, getLabel("Ease"), easeBox, divrbtn, replcbtn, getHeader("Split Flap", 2), splitFlapdiv, getLabel("Speed"), splitFlapinpt, splitFlapbtn );