Använd jQuery-användargränssnittet för att styra storleken på din text

JQuerys användargränssnitt kan lägga till så mycket till en webbsida. Det finns många olika widgets som användargränssnittet ger. En upp och kommande stjärna är reglaget. I den här handledningen visar jag dig hur du använder en reglage för att styra textstorleken på en artikel på en sida. Detta låter användaren kontrollera exakt storleken som passar dem, och det är också en ganska imponerande funktion att ha på en webbplats!

Den glidande delen av denna handledning reproducerar en teknik som ursprungligen skapades av Buck Wilson.




Vårt mål

Vi vill så småningom att vår sida ska se ut så här:

Beteende:

  • När skjutreglaget släpas, kommer en bubbla att blekna in och berätta om den aktuella storleken.
  • Texten "aktuell textstorlek" visas också med den aktuella textstorleken bredvid den.
  • Vi kommer också att försöka göra texten ökar en px eller minska en px på klicket på plus- eller minustecknet.

Steg 1: Få nödvändiga Javascript-filer

Självklart behöver vi JQuery, men vi behöver också några användargränssnitt för att utvidga JQuery. Vi kan få en användargränssnittfil som är anpassad till våra behov på JQuery-användargränssnittet Bygg din nedladdningssida.

Som du kan se finns det några riktigt bra ljudeffekter där! Så frestande som det kan vara, behöver vi inte alla dessa effekter för att uppnå den önskade produkten. Allt vi behöver är:

  • UI Core
  • Slider
  • Klaus Hartl's Cookie plugin

Steg 2: HTML

För denna handledning kommer jag inte att slösa bort tid för att förklara grunderna i HTML och skapa en layout med den och CSS. Om du vill lära dig mer om det finns det andra handledningssätt här som min Top Panel handledning eller Collis 'Tabbed Content handledning.

     Nätskärmar       

Text Size Slider

Nuvarande teckensnitt:

Lorem Ipsum är helt enkelt dummy text av tryckeriet och typesetting industrin. Lorem Ipsum har varit branschens standard dummy text från 1500-talet, när en okänd skrivare tog en typ av typ och förvrängde den för att göra en typprovsbok. Det har överlevt inte bara fem århundraden, men också språnget i elektroniskt uppsättning, som förblir väsentligen oförändrad. Det blev populariserat på 1960-talet med utgivandet av Letraset-plåtar som innehöll Lorem Ipsum-passager och senare med skrivbordspubliceringsprogram som Aldus PageMaker inklusive versioner av Lorem Ipsum.

Så du märker flera saker:

  1. PNG-fixen för IE 5.5 och 6. Jag har länkat direkt till Googles kodsida. Det betyder att jag måste avsluta varje transparent PNG med a -trans.png .
  2. Jag har också länkat direkt till JQuery och vår anpassade UI-fil.
  3. Jag har satt de nödvändiga taggarna för skjutreglaget i #header

OBS! För att skjutreglaget ska fungera måste vi ha en bar och ett handtag.

Steg 3: CSS

Här är CSS för att få den sidan att se lite bättre ut. Den här sidan är ganska enkel, och därför är CSS ganska enkel också:

 kropp bakgrund: # 373737; text-align: center; marginal: 0px;  #header width: 700px; höjd: 200px; bakgrund: # 48887d url (bilder / header.jpg); marginal-vänster: auto; marginal-höger: auto; position: relativ;  .slider_container position: absolute; höjd: 25px; topp: 170px; vänster: 165px;  .minus background: url (images / minus-trans.png) no-repeat; höjd: 9px; bredd: 25px; överflöde: gömd; flyta till vänster; markör: pekare;  .slider_bar background: url (images / bar-trans.png) no-repeat; höjd: 9px; bredd: 316px; flyta till vänster; marginal: 0px 5px; position: relativ;  .add bakgrund: url (bilder / add-trans.png) no-repeat; höjd: 25px; bredd: 23px; flyta till vänster; position: relativ; topp: -5px; markör: pekare;  .slider_handle background: url (images / selector-trans.png) no-repeat; höjd: 25px; bredd: 12px; position: absolut; topp: -8px;  #slider_caption background: url (images / caption-trans.png) no-repeat; höjd: 45px; bredd: 38px; överflöde: gömd; position: absolut; topp: -50px; margin-vänster: -10px; vaddering: 5px 0px 0px 0px; font-family: "Myriad Pro"; färg: # 36665d; font-weight: bold; text-align: center;  #text font-family: Helvetica, Arial, sans-serif; bredd: 655px; bakgrund: # f9f9f9; marginal-vänster: auto; marginal-höger: auto; vaddering: 20px 20px 20px 25px; position: relativ;  #text p font-size: 12px; text-align: left; svart färg;  #text h1 text-align: left; marginal-vänster: 20px;  p font-family: Arial, Helvetica, sans-serif; färg: #CCCCCC;  #font_indicator position: absolute; höger: 100px; topp: 50px; typsnittstorlek: 10px; display: none;  

Återigen kommer jag inte att gå i detalj med CSS heller. Om du fortfarande behöver mer hjälp med det, var noga med att kolla in de två handledningarna som jag nämnde ovan. Om du har några frågor, var god och låt mig veta i kommentarerna.

Observera att alla png-bilder som har alfa-genomskinlighet har a-trans.png slutar.

Steg 4: Grundläggande Slider Effects

När jag först lärde mig om glidareffekten, googled jag det för att undersöka lite mer om det och hur det fungerar. Tja, jag hade tur att hitta denna fantastiska screencast. Det hade en riktigt snygg effekt också; en bildtext som tycktes visa skjutreglaget, ovanpå reglaget. Tyvärr stannade de där. Vi kommer att använda en variant av deras JQuery-kod som en hoppa av punkt:

 $ (funktion () $ ('# slider_caption'). hide (); var captionVisible = false; $ ('slider_bar'). skjutreglaget (handtag: '.slider_handle', startValue: 26, minValue: 0, maxValue : 100, start: funktion (e, ui) $ ('# slider_caption'). FadeIn ('fast', funktion () captionVisible = true;);, stopp: funktion (e, ui) if captionVisible == false) $ ('# slider_caption'). fadeIn ('fast', funktion () captionVisible = true;); $ ('# slider_caption'). css ('left', ui.handle.css ("font": ui.value * 15/100 + 8) .text (Math.round (ui.value * 15/100 + 8)); $ ("div # text p" fadeIn ("slow"); $ ('# slider_caption'). fadeOut ('fast', funktion () captionVisible = false;);, slide: funktion (e, ui) $ css ('left', ui.handle.css ('left')) .text (Math.round (ui.value * 15/100 + 8)); $ ("div # text p"). css (fontSize: ui.value * 15/100 + 8). fadeIn ("slow"););

Några viktiga idéer:

  • Först döljer vi bildtexten med Javascript. Detta gör bildtexten synlig om Javascript är inaktiverat för bara lite mer tillgänglighet.
  • Som du kan se har vi nu en .slider-modifierare och flera delpunkter:
    • startValue: Detta anger positionen som handtaget börjar vid
    • minValue: Detta anger det lägsta värde som handtaget ska gå till
    • MAXVALUE: Detta anger det maximala värde som handtaget ska gå till
    • Start: Det här låter oss berätta för JQuery vad man ska göra när användaren börjar glida i fältet
    • sluta: Detta anger vad som händer när skjutreglaget släpps
    • glida: Detta anger vad som händer när skjutreglaget glider
    • hantera: Detta gör att vi kan ange vad som ska vara handtaget
  • Vi tilldelar också en variabel som hjälper oss veta när sluta: inträffar, om bildtexten är synlig eller inte, och sedan utföra en åtgärd utifrån den slutsatsen.
  • Vi var också tvungna att sätta en gräns för de möjliga teckensnittstorlekarna, så vi begränsade möjligheterna till glidervärden till mellan 8 och 23. Vi gjorde det genom att utföra grundläggande matte på värdet på skjutreglaget. (multipliceras med 15/100 och tillsattes 8)
  • Denna ekvation resulterade i decimaltal storlekar, så vi var tvungna att runda den Math.round
  • Observera också metoden genom vilken vi gjorde bildtexten på toppen av handtaget. Vi gjorde css vänstervärdet av bildtexten lika med handtaget.
  • Observera att på sluta: Jag har textstorleken animerad, medan jag har css-formatet ständigt under pågående bildspel. Det kan tyckas kontraintuitivt, det på glida: Jag skulle inte animera det, men med kärnan att gradvis glida och förstora storleken gör det samma sak. Om jag skulle animera istället för att bara ändra css, skulle det vara hakigt och inte svara.


Steg 5: Lägga till texttexten

 $ (funktion () $ ('# slider_caption'). hide (); var calloutVisible = false; $ ('slider_bar'). skjutreglaget (handtag: '.slider_handle', startValue: 26, minValue: 0, maxValue FadeIn ('slow', funktion () calloutVisible = true;); $ ('# font_indicator'). FadeIn ('slow' ); stoppa: funktionen (e, ui) if (calloutVisible == false) $ ('# slider_caption'). fadeIn ('fast', funktion () calloutVisible = true;); $ font_indicator '). fadeIn (' slow '); $ (' # slider_caption '). css (' left ', ui.handle.css (' left ')) .text (Math.round (ui.value * 15/100 + 8)); $ ('# font_indicator b') .text (Math.round (ui.value * 15/100 + 8)); $ ("div # text p"). Animate (fontSize: ui.value FadeIn ("slow", function () calloutVisible = false;); $ ('# font_indicator'). fadeOut ('slow');, slide: funktion (e, ui) $ ('# slider_caption'). css ('left', ui.handle.css ('left')) ui.value * 15/100 + 8)); $ ('# font_indicator b'). text (Math.round (ui. värde * 15/100 + 8)); $ ("div # text p"). css (fontSize: ui.value * 15/100 + 8). fadeIn ("slow"); );


Viktiga idéer om #font_indicator

  • Vi lade till samma blekna in och blekna ut effekterna i samma fläckar som bildtexten
  • Vi lämnade dock bort css vänster position
  • Observera att vi har en tagg inom div # font-indikatorn. Detta gör inte bara numret mer, men tillåter oss att bara sätta det nuvarande reglaget för reglaget som text i det. Om vi ​​bara bifogade slutet av diven, skulle varje fontstorlek bara hoppa upp i slutet.

Steg 6: Ge Plus- och Minus-åtgärderna

Detta skulle bara inte vara en funktionell design, om vi inte gav plus- och minusteckningarna handlingar på klick. Denna kod kan vara lite slarvig och inte helt effektiv, men det blir jobbet gjort. Detta projekt krävde en överraskande mängd matematik, vilket förklarar några av de snygga siffrorna som slutar användas.

Utan ytterligare ado, här är resten av javascript, jag kommer att förklara det efteråt:

 css ('font-size'); var currentFontSizeNum = parseFloat (currentFontSize, 10); var newFontSize = currentFontSizeNum + 1, om (newFontSize < 24)  $('#text p').css('font-size', newFontSize); $('#slider_caption').css('left', newFontSize*19.75 - 158).fadeIn('fast').text(Math.round(newFontSize )).fadeOut(); $('.slider_handle').css('left', newFontSize*19.75 - 158); $('#font_indicator').fadeIn('slow'); $('#font_indicator b').text(Math.round(newFontSize )); $('#font_indicator').fadeOut('slow');  else $('#font_indicator').fadeIn('slow'); $('#font_indicator b').text("Isn't 23 big enough?"); $('#font_indicator').fadeOut('slow');  return false; ); $(".minus").click(function() var currentFontSize = $('#text p').css('font-size'); var currentFontSizeNum = parseFloat(currentFontSize, 10); var newFontSize = currentFontSizeNum-1; if (newFontSize > 8) $ ('# text p'). Css ('font-size', newFontSize); $ ('# slider_caption'). css ('left', newFontSize * 19,75 - 158) .fadeIn ('fast') .text (Math.round (newFontSize)) .fadeOut (); $ ('slider_handle'). css ('left', newFontSize * 19,75 - 158); $ (# Font_indicator) FadeIn (långsam). $ ('# font_indicator b'). text (Math.round (newFontSize)); $ (# Font_indicator) fadeout (långsam).  annars $ ('# font_indicator'). fadeIn ('slow'); $ ('# font_indicator b'). text ("Är inte 8 tillräckligt liten?"); $ (# Font_indicator) fadeout (långsam).  returnera false; );

Några viktiga anteckningar:

  • Om du vet grundläggande Javascript-syntax ska det vara ganska självklart.
  • Jag tilldelar en initial variabel för att få den aktuella teckensnittstorleken.
  • Sedan konverterar jag det till ett heltal
  • Jag skapar sedan en annan variabel som är ett värde högre.
  • Jag sätter gränsen mellan under 24 och över 8, med hjälp av en om annat påstående.

Matte tid

Justering av handtaget och bildtexten för att reagera på plus och minus-klick var en riktig utmaning. Vad jag slutade göra var att bestämma bredden på stapeln (316px) och dela upp den mellan de 16 möjliga teckensnittstorlekarna (8-23) för att räkna ut hur mycket utrymme varje steg tog.

316/16 =

För att vara säker måste jag sedan räkna ut startpunkten för teckensnittstorleken. Jag visste att det här inte var just 12, för jag modifierade det något med 15/100 + 8. Så jag tog startvärdet på handtaget (26) och multiplicerade det med det:

26 * 15/100 + 8 =

Jag tänkte på det, eftersom det var avrundat skulle det vara tolv ändå.

Så jag tänkte på att handtaget skulle vara [fontstorlek * 19.75 - 158 (de första 8 storlekarna)] px.

Trodde bara att jag skulle ge dig en inblick i min konstiga och överkomplicerade matte;). Det finns förmodligen mycket enklare sätt att göra det, men jag antar att det här är min logik.

Steg 7: Cookie Time, läser kakan

För att hantera kakor använde jag Klaus Hartls utmärkta cookie plugin. Du kan visa den grundläggande syntaxen för plugin-modulen i länken som jag angav. Utmaningen var att hitta en plats som på ett tillförlitligt sätt ställa in kakan. Jag slutade med att ställa in det när webbläsaren uppdaterar eller ändrar sidan. På så sätt gör det bara det när det är nödvändigt och realiserbart också. Först lägger vi till koden till toppen av javascript filen för att läsa kakan:

 var startSize = $ .cookie ('fontSize'); var startSize = parseFloat (startSize, 12); $ ('# text p'). css ('fontstorlek', startstorlek);

Vad jag gjorde:

  • Jag läste först kakan och skickade den till variabeln startSize
  • Jag ändrade sedan den variabeln till ett heltal
  • Sedan lade jag till det numret till standard css i texten

Steg 8: Ställ in kakan

Som jag nämnde ovan måste vi ställa in kakan när sidan är avslutad. Det gör vi genom att använda följande kod:

 window.onbeforeunload = leaveCookie; funktion leaveCookie () var FontSize = $ ('# text p'). css ('font-size'); var IntFontSize = parseFloat (FontSize, 10); $ .cookie ('fontSize', IntFontSize); 

Vad jag gjorde:

  • OBS: Denna JS är utanför av JQuery $ (funktion () );
  • Först aktiverade jag en funktion när webbläsaren lämnade sidan
  • Sedan konverterade jag textstorleken till ett heltal
  • Sedan lägger jag detta i kakan

Det är allt!

Hoppas du hittade denna handledning användbar! Var god ursäkta min programmeringslogik, jag tänker inte alltid så effektivt: P. Om du har några frågor eller kommentarer, vänligen meddela mig det i kommentarerna!

  • Prenumerera på NETTUTS RSS-flödet för fler dagliga webbutvecklingstoppar och artiklar.