Jednoduchý kolotoč. Jak vytvořit karusel pouze pomocí HTML a CSS. Dynamický blok „Zákaznické recenze“

Existují dvě základní pravdy, z nichž skutečná věc začíná. První věc, kterou musíte udělat, je říct si "pojďme!" a vypracovat podnikatelský plán.
Které by určovaly směr vývoje, očekávané náklady a zisky, zohledňovaly rizika a dodatečné příjmy. Ale pokud je to s tím prvním jednodušší, popadli jsme dědečkovu šavli ze zdi a šli zahradou nakrájet zelí. U druhého je vše velmi složité - někdy je švih za rubl, ale efekt za groš.

Nakonec se ukáže, že neexistuje žádný plán a neexistuje ani představa o tom, co dělat teď a zítra. Stojí za to mít na paměti, že existují dva typy podnikatelských plánů: jednoduchý, který sestavuje spíše pro vás, a složitý pro investice a bankovní úvěry. Ale při sestavování kterékoli z nich přichází pochopení, co můj blízký potřebuje, co zvládnu a kde budu muset hledat pomoc nebo dokonce opustit nějakou část směru ve své činnosti. Zatím nebudu nikoho obtěžovat složitými obchodními plány, naštěstí na to existují pokročilé zdroje týkající se podnikového managementu a lze tam získat úplnější informace – i když někdy za hubičku.

Ale my na internetu, domácí podnikání, a jaký čas tomu věnovat - jaké úsilí, jak vážně to brát. Může pomoci vytvořit jednoduché prodejní náklady, možná dokonce předpovědět zisky a ztráty.

– Na základě toho je snadné plánovat, jak spravovat své zdroje a jak využívat provozní prostředky.

Abychom mohli být definováni, jedná se o základní plán rozvoje, ve kterém je pouze několik prvků startupu: cíle, způsoby, jak toho dosáhnout, analýza životního prostředí a analýza rentability. To dává, byť stručné, ale přesto pochopení vašeho vlastního podnikání.
A přesto není každý startup tak jednoduchý, jak bychom si přáli.

Některé z nich vyžadují investice, podrobnější myšlení a odpovídající plánování, což se neobejde bez dostatečné analytické práce. Bylo mi nabídnuto nějak předělat starý již fungující investiční projekt na nový, ale obyčejným způsobem - přepsat a mírně opravit čísla ve studii proveditelnosti (studii proveditelnosti), abych získal úvěr na propagaci. Ale i když jsou v bankách úředníci, někdy mají také mozek - mohli by snadno přijít na to, že je to napůl fake, aniž by zkoumali dotyčný investiční projekt. Otázky, které nám byly položeny, jsou poněkud složité a vyžadují poněkud podrobný přístup.
V každém případě by i jednoduchý startovací plán měl obsahovat informace dostatečné k přilákání partnerů a sponzorů, které dešifrují zaměření internetového zdroje.
Můžete vydělávat peníze online pomocí zdroje několika způsoby a neměli byste je míchat, protože jeden směr bude zasahovat do druhého - tým instalatérů bude stěží schopen kombinovat práci v supermarketu.
Zde je přibližná šablona, ​​ze které by se mohl skládat podnikatelský plán pro spuštění:
Plán esence tématu tématu
1 Shrnutí Nejdůležitější
1.1 Cíle
1.2 Způsoby, jak toho dosáhnout
2 Spuštění spuštění souhrnu zdrojů
3 Popis činnosti
4.1 Segmentace trhu
4.2 Strategie cílového segmentu trhu
4.3 Specifika segmentu
5 Implementace a shrnutí strategie
5.1 Konkurenční výhody
5.2 Konkurenční strategie prognózy prodeje
6 Obnovit správu
7 Finanční plán

7.1 Stanovení bodu zvratu

  • Některé věci z jednoduchého obchodního plánu mohou jít přes hlavu majitele, ale každý podnik má plán. Kdokoli může těžit z vytváření dokumentů, pokud jsou nápady zapsány, protože proces přípravy osnovy je přínosný a cenný.
  • Jakmile se další osoba zajímá o potřebné parametry již vytvořeného plánu, je důležité zprostředkovat porozumění cílům, strategii a podrobné implementaci.
  • Jakmile se někdo z vnějšího prostředí zajímá o funkce startupu, ačkoli to na začátku nebylo zamýšleno, musíte poskytnout další informace. Když je plán jen pro vnitřní použití, nemůžete popsat historii spouštění, například vlastnosti zdroje. Držte se témat, která vytvářejí přidanou hodnotu – to vám nakonec pomůže dosáhnout vašeho cíle. Když přitahujete lidi, partnery, sponzory, musíte poskytnout podrobnější informace informace o pozadí jako součást tohoto plánu.
  • Pro účely diskuse o vyhlídkách stačí získat počáteční plán. Pokuste se popsat své cíle, způsoby, jak jich dosáhnout, cílový trh, konkurenční výhody a základní strategie. Jak dobře se to překrývá s podnikatelským nápadem?
  • I když jste schopni mentálně provádět finanční analýzy související s aktivitami vašeho startupu, je přesto mnohem snazší, když použijete nějaké nástroje, které vám dají jasnou posloupnost akcí a automaticky je sčítají a odečítají.
  • Tady pomáhá plán. Opravdu znáte trh, na kterém jste si vybrali své místo? Dobrá analýza

trh vám může pomoci vidět příležitosti, které nemusí být zřejmé. Pochopte, proč se lidé obracejí na ostatní a navštěvují jejich zdroje.

Jaké jsou potřeby návštěvníků? Kolik z nich je jako potenciálních klientů? Tímto způsobem se rozhodnete, zda je váš podnikatelský plán velmi důležitý, a to i v rané fázi startupu, a i když si ho dokážete udržet v hlavě. pro podnikání sní o tom, že z ní vyroste „jednorožec“, který změní svět. Ale podle statistik se rozjede jen 1 z 10 projektů, zbytek selže. Proč se to děje a co lze udělat na začátku projektu, aby se minimalizovalo riziko jeho selhání - řekl Vladimir Lysikov, investiční analytik Capital Times.

— V praxi investičního bankovnictví se musíme vypořádat s nápady a projekty, které generují podnikatelé. Často si myslí, že by mohli přijít unikátní technologie nebo řešení. A čím déle svůj vynález živí, tím více si ho zamilují a někdy ztrácejí smysl pro realitu, ve které by toto řešení mělo fungovat a přinášet zisk.

Vladimír Lysikov
Investiční analytik ve společnosti Capital Times

Často tyto nápady již investovaly obrovské množství peněz, času a energie do vývoje a propagace jejich řešení na trhu, který v podstatě neexistuje. K tomu dochází, když si podnikatel žárlivě hlídá své území a brání tak hypotéze, že jde špatnou cestou.

Ještě před 30 lety trval vývojový cyklus nového řešení 5-10-15 let a i v případě konstrukční chyby uživatelům stále nezbývalo nic jiného, ​​než navrhovaný produkt použít.

Nyní se vývojový a startovací cyklus zkrátil na několik měsíců.

Dovolte mi uvést příklad. Verze software Uvažuje se 1.0 klíčová fáze rozvoj. Produkt je zpravidla považován za připravený a může být prodáván od okamžiku vydání první verze do širokého kruhu uživatelů. Wargaming představil verzi World of tanks 1.0 teprve 20. března 2018, i když online vydání proběhlo již v roce 2011. Od té doby vývojář vydal 45 klientských aktualizací, plné nastavení, doplňky, vylepšení. Monetizace projektu přitom skutečně začala v beta verzi produktu.

Pokud by Wargaming strávil více než 7 let vývojem produktu interně, aniž by dostával zpětnou vazbu od uživatelů účastnících se bitev každý den, na trh by se dostal produkt, který nesplňuje očekávání hráčů a jen stěží by byl schopen oslovit své publikum. .

Proč startupy selhávají

Podle mého názoru existují tři hlavní důvody selhání spuštění:

1. Slepá láska zakladatelů k jejich projektu.

2. Neschopnost soustředit se na problém, který má projekt řešit.

3. Neochota pečlivě zvažovat životaschopnost nápadů.

A pokud se s láskou podnikatele k jeho duchovnímu dítěti nedá prakticky nic dělat, pak ostatní důvody (koncentrace na problém a komplexní studium životaschopnosti nápadu) není tak těžké zjistit.

Podniky tradičně používají nástroje, jako je ekonomické modelování a vypracování podrobného plánu ve formě podnikatelského plánu, k posouzení životaschopnosti. Ale pro startupy není tato forma ocenění opodstatněná ani z hlediska nákladů, ani z hlediska hodnoty. A samotný podnikatelský plán není ani tak odrazem reality, jako spíše „fantazií a očekáváním“ autora. Z tohoto důvodu nemusí být realizován ani na papíře dokonale vyvážený podnikatelský plán s vynikajícími ukazateli.

Velké náměstí místo podnikatelského plánu

Alternativou k tradičnímu podnikatelskému plánu v tomto případě může být sestavení jakéhosi „screenshotu“ hlavních konceptů budoucího podnikání ve formě konceptu vyvinutého pomocí technologie Business Model Canvas nebo Lean Canvas.


Ilustrace z knihy Generace obchodních modelů od Alexandra Osterwaldera, Yves Pigneur

Technologie obchodního modelování Business Model Canvas (autoři: Alexander Osterwalder, Yves Pigneur) je šablona pro stabilní strukturu jakéhokoli podnikání, která se skládá z 9 hlavních prvků.

1. Spotřebitelé.

V tomto bloku musíte určit, jaké skupiny lidí a organizací chcete přilákat a sloužit jim. Pro lepší uspokojení potřeb zákazníků je vhodné rozdělit je do skupin podle jejich potřeb, charakteristik chování, případně jiných charakteristik.

2. Produkty (hodnotová nabídka).

Zde byste měli popsat, proč by si zákazníci měli vybrat váš produkt před produktem vaší konkurence.

3. Vztahy s klienty. V tomto bloku musíte jasně definovat, jaký typ vztahu chcete se spotřebiteli navázat. Ty se mohou pohybovat od osobních po automatizované.

4. Prodejní kanály. Jedná se o systém interakce mezi firmou a spotřebitelem, styčný bod mezi prodejcem a klientem. 5. Příjem.

7. Klíčoví partneři.

Síť dodavatelů a partnerů a typy vztahů s nimi, jako je strategická spolupráce nebo spolusoutěž. 8. Klíčové zdroje. Klíčové zdroje mohou být materiální, finanční, intelektuální nebo lidské (personální). Společnost může být vlastníkem těchto zdrojů, pronajímat je nebo je přijímat od klíčových partnerů. Různé typy

obchodní modely vyžadují různé zdroje. Výrobce čipů potřebuje kapitálově náročnou výrobní kapacitu, ale konstruktér těchto čipů potřebuje lidské zdroje.

9. Náklady.

V tomto bloku je nutné popsat nejvýznamnější náklady projektu a jejich druhy. Popsaná technologie umožňuje kombinovat a vidět vnitřní vztahy a sémantické řetězce v procesu tvorby zisku. Například jaké nástroje (zdroje) je třeba použít k provádění činností k výrobě produktu, kolik tyto zdroje stojí a jak je lze zlevnit. To vyžaduje studium silných stránek a slabiny podle klíčových bloků modelu vyhodnotit a přizpůsobit řešení spotřebitelům a vlivu změn

vnější prostředí

a co je nejdůležitější, ujistěte se, že všechny bloky modelu jsou vzájemně konzistentní.

Výsledkem je jednostránkový, jasně strukturovaný podnikatelský nápad. Business Model Canvas však může být pro startupy obtížné použít, protože do některých buněk se nic nevejde (projekt nemusí mít partnery nebo budoucí prodejní kanály jsou zcela nejasné).


Podnikatel Ash Morya přehodnotil technologii Business Model Canvas a navrhl svou vlastní technologii – Lean Canvas.

Kliknutím na obrázek jej zvětšíte

Ilustrace z leanstack.com

Bloky musí být vyplněny v pořadí uvedeném na obrázku.

1. Určete cílové publikum – kdo je klient.

4. Popis řešení. Je třeba klást důraz na klíčové schopnosti

jeho řešení, avšak s přihlédnutím k popisu mechanismu řešení těchto problémů. 5. Jedinečná nabídka. V tomto bloku je důležité formulovat v

krátká forma

, maximálně 140 znaků, jedinečnost našeho produktu, rozdíl mezi produktem a konkurenčními řešeními.

6. Prodejní kanály. Zde je třeba určit způsoby, kterými se klient o produktu dozví.

7. Klíčové projektové metriky. Do tohoto bloku se vyplatí zapsat kritéria, podle kterých budete projekt sledovat: jaký bude produkt v horizontu 3 let, jaký finanční výsledek produkt vygeneruje, tempa růstu. 8. Struktura nákladů.

Náklady by měly být rozděleny do dvou kategorií: počáteční náklady na produkt a opakované náklady na vývoj. 9. Skrytá výhoda. V tomto bloku musíte okamžitě zajistit opatření na ochranu produktu, například obrovský.

zákaznickou základnu

, patenty, licence, značka, vysoké vstupní náklady.

Většina začínajících podnikatelů, když se poprvé snaží sestavit náčrt svého budoucího podnikání v jakékoli podobě, nedokáže ani přibližně vyplnit všechny bloky. V naší praxi se tak v analýze vyskytují nejčastější a nejkritičtější chyby

cílové publikum

Dovolte mi uvést příklad. Skupina podnikatelů z Uzbekistánu vyvinula internetový portál, který shromažďoval aktuální informace o dostupnosti a ceně léků v lékárnách. Projekt byl spuštěn, ale oproti očekávání zakladatelů nedokázal generovat zisk jen proto, že za cílovou skupinu byly identifikovány samotné lékárny, nikoli uživatelé stránek – obyčejní lidé.

Jako shrnutí

V každém případě kresba plátna pomáhá zakladateli určit cíl, vyhlídky podnikání, jeho rizika a hlavní finanční parametry rozvoje. Vypracování obchodního modelu pro startup pomocí popsaných technologií samozřejmě není všelékem ani zárukou úspěchu, ale zakladatelé a investoři při pohledu na dokončené bloky okamžitě chápou jak vyhlídky projektu, tak stupeň rozpracovanosti. podnikatelský nápad. Občas musím řešit problémy spojené s frontendem, i když mě to nebaví :) bylo, že výsledkem by měl být skript JS, který prostřednictvím služby třetí strany Připojil bych se k webu. V důsledku toho již hotové karusely v JavaScriptu nebyly potřeba, protože Pro jejich integraci bylo nutné přidat připojení knihovny ke kódu HTML webu pomocí značky skriptu a zkopírovat samotné soubory buď na server, nebo je stáhnout přes cdn, ale to by opět vyžadovalo úpravu zdrojového kódu.

Jak vytvořit posuvník JavaScript: začátek

Dnes si myslím, že každý, kdo se ocitl v podobné situaci, začínal hledáním stávajícího vývoje, protože... když je úkol vyrobit JS karusel v rámci práce, měl by být vždy proveden co nejrychleji. A za takových podmínek vám nikdo nedovolí sedět a vymýšlet si vlastní kola.

Zákazníky vždy nezajímá, jak je kód napsán, jaká je jeho architektura, hlavní je vidět výsledek!

V důsledku toho, jak chápete, před napsáním posuvníku v JavaScriptu bez jQuery jsem se rozhodl najít hotový a upravit jej tak, aby vyhovoval mým potřebám. Proč ne jQuery? Ano, protože na cílovém zdroji, kam jsem plánoval připojit svůj posuvník prostřednictvím služby, bylo volání jQuery v kódu umístěno později než skript připojený službou. Proto konstrukty jQuery v mém kódu jednoduše nebyly vnímány.

Jako základ jsem vzal tento posuvník obrázků JavaScript - https://codepen.io/gabrieleromanato/pen/pIfoD.

Rozhodl jsem se tam zastavit, protože... jeho kód JS byl napsán na principech OOP a jeho třídy jsou založeny na prototypech, nikoli na banálních funkcích.

Abych byl upřímný, hluboce nerozumím a neuznávám současný humbuk kolem JavaScriptu pomocí OOP, frameworků a dalších architektonických věcí v jazyce, který byl původně zamýšlen jako jednoduchý dynamický skriptovací jazyk. Stejně jako samotný JS, upřímně řečeno, nemám rád jeho syntaktickou vinaigrettu, která umožňuje psát stejné konstrukce několika způsoby.

Ale bohužel v moderní svět Málokdo sdílí mé pozice, protože... tento jazyk se vyvíjí šíleným tempem a dokonce se pokouší získat mysl backendových vývojářů pomocí Node.js jako alternativy k Javě, PHP, C#, Ruby a dalším příšerám.

V důsledku toho, abyste nezůstali bez práce, musíte tiše přijít na JavaScript. A v implementaci posuvníku, kterou jsem si vybral, čistý JavaScript Setkal jsem se s něčím, čím, jak chápete, pohrdám daný jazyk. Proto jsem si to vybral, aby byl alespoň nějaký důvod pracovat a rozumět JavaScript OOP a prototypovým třídám - jinak bych na ně v životě dobrovolně nesáhl :)

Na základě kódu, který jsem našel, jsem potřeboval vyvinout slider v čistém JS ve vyskakovacím okně (tato věc se také nazývá popup, popup atd.), který by měl tlačítka pro přepínání snímků a klikací indikátory aktuálního skluzavka. Bylo také nutné vyrobit tlačítko pro zavření tohoto okna.

Tím jsem skončil.

Vytvoření posuvné JS knihovny

Nejprve jsem se rozhodl vše chytře implementovat a udělat pro stránky JavaScriptový slider v podobě knihovny připojitelné k webu pomocí jediného skriptu, ve kterém se budou volat komponenty slideru rozdělené do podadresářů. Rozhodl jsem se to nazvat popupSlider.js na počest jeho původního účelu.

Jeho kód najdete na GitHubu na této adrese - https://github.com/Pashaster12/popupSlider.js

Struktura knihovny je následující:

Složka snímků je určena pro snímky snímků. Ovládací prvky obsahuje obrázky ovládacích prvků karuselu JS (tlačítka pro zavírání posuvníku a přepínání snímků). A v aktivech jsou statické prvky posuvníku JS: značka HTML a soubor se styly CSS.

No a soubor popupSlider.js je srdcem samotné knihovny, do které se zapisují JavaScriptové akce karuselu a navazuje spojení s dalšími soubory. Právě ten se na webu spojí a zavolá ostatní.

Rozhodl jsem se začít s HTML značením našeho kolotoče obrázků JS, který v mém případě vypadá takto:

Text 1 Text 2 Text 3

Chcete-li navrhnout posuvník v JavaScriptu jako vyskakovací okno, použil jsem následující styly:

#slider ( margin: auto; šířka: 600px !důležité; přetečení: skryté; ) #slider-wrapper ( šířka: 9999px; výška: 343px; pozice: relativní; přechod: vlevo 400 ms lineární; ) .slide ( plovoucí: vlevo; šířka : 600px; pozice: relativní přetečení: skryté; .caption (width: 600px; height: 110px; line-height: 1.5; font-size: 15px; font-weight: 300; text-align: center; color: # 000; display:table; ) .caption-container ( display: table-cell; vertical-align: middle; padding: 0 20px; ) #slider-nav ( position: absolute; bottom: -36px; text-align: center; left: 50 %; transformace: translateX(-50 %) ; okraj: 0 5px; barva pozadí: #fafafa : 20px nahoře: 50%;

vlevo: -40px; ) #prev:hover ( background: url(../controls/arrow_left_active.png); ) #next ( background: url(../controls/arrow_right_inactive.png); right: -40px; ) #next:hover ( pozadí : url(../controls/arrow_right_active.png); #cq-popup ( šířka: 600px; z-index: 23; vlevo: calc(50%); nahoře: calc(50%); pozice: fixní !důležité ; background-repeat: no-repeat: #fff; font-family: "Roboto","Segoe UI","Helvetica","Georgia","Calibri","Verdana" ; %, -50 %) scale(1); #cq-popup .header ( display: inline-block; font-size: 17px; font-weight: 500; ) #cq-popup > div ( width: 500px; font-); velikost: 22px; výška řádku: 36px ; výška: 16px; šířka: 16px; ) #cq-popup-btclose:hover ( pozadí: url(../controls/btn_delete_active.png); ) #cq-popup-bg ( pozice : pevná; šířka: 100 %;

výška: 100 %; pozadí: rgba(51,51,51,0,8); Přesunul jsem popupSlider.html a popupSlider.css do samostatných souborů, které jsou umístěny v adresáři aktiv knihovny jezdců JavaScriptu. Udělal jsem to záměrně, aby uživatelé při použití tohoto kódu mohli snadno upravit označení a design, aniž by se museli pohrabat v kódu JS, kde by se to, co by se muselo vypisovat, muselo psát přímo.

Navíc mnoho lidí stále rádo minimalizuje JS, aby urychlilo načítání stránek. Takže přizpůsobit toto rozhodnutí za těchto podmínek by to bylo velmi obtížné.

Nakonec jsem se rozhodl jen připojit připravené soubory v souboru hlavní knihovny popupSlider.js, který pro můj úkol měl následující podobu:

Funkce Slider(element) ( this.loadStatic(); this.el = document.querySelector(element); this.init(); ) Slider.prototype = ( init: function () ( this.links = this.el.querySelectorAll ("#slider-nav a"); this.wrapper = this.el.querySelector("#slider-wrapper"("#prev"); navigovat: function (); ) ( var self = toto; pro (var i = 0; i< this.links.length; ++i) { var link = this.links[i]; link.addEventListener("click", function (e) { self.slide(this); }); } self.prevBtn.style.display = "none"; self.nextBtn.addEventListener("click", function (e) { var currentSlideNumber = document.querySelector("#slider-nav a.current").getAttribute("data-slide"); var nextSlide = document.querySelector(""); nextSlide.click(); }, false); self.prevBtn.addEventListener("click", function (e) { var currentSlideNumber = document.querySelector("#slider-nav a.current").getAttribute("data-slide"); var prevSlide = document.querySelector(""); prevSlide.click(); }, false); self.close(); }, slide: function (element) { this.setCurrentLink(element); var index = parseInt(element.getAttribute("data-slide"), 10) + 1; var currentSlide = this.el.querySelector(".slide:nth-child(" + index + ")"); this.wrapper.style.left = "-" + currentSlide.offsetLeft + "px"; if (index < this.links.length) this.nextBtn.style.display = "block"; else if (index == this.links.length) this.nextBtn.style.display = "none"; if (index >1) this.prevBtn.style.display = "blok";< a.length; ++j) { var cur = a[j]; if (cur !== link) { cur.className = ""; } } }, loadStatic: function () { var self = this; var link = document.createElement("link"); link.rel = "stylesheet"; link.href = "assets/popupSlider.css"; document.head.appendChild(link); var sliderHTML = ""; var xhr = new XMLHttpRequest(); xhr.open("GET", "assets/popupSlider.html", false); xhr.send(); if (xhr.status != 200) { alert("Can not load the popupSlider.html. Got the error " + xhr.status + ": " + xhr.statusText); } else { sliderHTML = xhr.responseText; } var div = document.createElement("div"); div.innerHTML = sliderHTML; document.body.appendChild(div); }, close: function () { document.getElementById("cq-popup-btclose").onclick = function () { document.getElementById("cq-popup-bg").remove(); document.getElementById("cq-popup").remove(); } } };

else if (index == 1) this.prevBtn.style.display = "none";

), setCurrentLink: function (link) ( var parent = link.parentNode; var a = parent.querySelectorAll("a"); link.className = "aktuální"; this.currentElement = odkaz; for (var j = 0; j

Několik poznámek k výše uvedenému kódu. Obsah souboru popupSlider.js je jediná třída JavaScript Slider, která stejně jako v PHP obsahuje konstruktor a metody třídy. Pouze v JS je definice konstruktoru na rozdíl od PHP povinná.

Konstruktor je definován pomocí následující konstrukce:

Posuvník funkce (prvek) ( //kód konstruktoru)

Uvnitř konstruktoru musí být zadány akce, které budou provedeny při vytváření objektu třídy.

Samotné metody třídy budou umístěny uvnitř prototypu a budou dostupné všem instancím této třídy JavaScriptu. Prototyp JS je v mém případě popsán následujícím návrhem:

Slider.prototype = ( //method )

Budou voláni mimo tělo třídy takto:

Var slider = new Slider(); slider.class_method();

A uvnitř samotného kódu třídy je k dispozici následující metoda: This.class_method(); Hlavní je na to nezapomenout

Var self = toto; self.metoda_třídy(); //pro přístup k metodě umístěné o úroveň výše, než je kód popsané metody

Zdá se, že jsem mluvil o všech nuancích psaní kódu. Nyní pár slov o metodách naší třídy JavaScript, které obsahují popisy akcí JS kolotoče obrázků.

loadStatic()

Úplně první metoda volaná při vytváření instance třídy v konstruktoru. Zodpovědný za přidání označení posuvníku a souboru se styly do HTML kódu webové stránky.

Nejprve se v paměti vytvoří nová značka odkazu pomocí JavaScriptové funkce document.createElement() a přiřadí se jí hodnoty všech potřebných atributů, včetně cesty k souboru CSS se styly posuvníku JS. A nakonec se to přidává HTML stránky s pomocí JavaScript metoda appendChild() na konec sekce hlavy, kde by měly být styly.

Dále uděláme totéž pro soubor s HTML značení náš posuvník v čistém JavaScriptu. Je zde jen malá nuance: do stejného souboru nemůžete vložit pouze soubor HTML, jako jsme to udělali se souborem CSS. Existují na to speciální knihovny, například aby bylo možné zahrnout HTML do HTML, výborná je lib od w3.org - https://www.w3schools.com/howto/howto_html_include.asp

Pak by ale musel být buď zahrnut v samotné knihovně posuvníků, nebo požádat uživatele, aby si jej nainstalovali sami. To vše je ale neoptimální, protože... vyžaduje mnoho pohybů těla a zpomaluje rychlost načítání webu kvůli dalším skriptům.

V důsledku toho jsem se rozhodl přijímat obsah HTML soubor uvnitř JavaScript kód a vložte jej do nového prvek div, vytvořený v paměti, jako jsem to udělal dříve, abych zahrnul soubor CSS do JavaScriptu. Vygenerovaný prvek je zahrnut na samém konci části těla HTML kódu stránky webu.

Pokud chcete vložit div s označením posuvníku nejen na konec těla, ale do konkrétního kontejneru, můžete místo toho použít následující kód:

Var div = document.createElement("div"); div.innerHTML = sliderHTML; document.body.appendChild(div);

Zadejte následující a zadejte požadovaný identifikátor cílového kontejneru (v mém případě bude posuvník HTML JS umístěn v prvku s id popupSlider):

Var target = document.querySelector("#popupSlider"); target.innerHTML = sliderHTML;

Metoda, která je volána v konstruktoru po loadStatic(), je potřebná k inicializaci vlastností třídy odpovídajících těm hlavním. HTML prvky, ke kterému přistoupíme v následujícím kódu.

Nakonec se zavolá metoda navigate().

navigovat()
V této metodě jsou akce, ke kterým dojde, když kliknete na tlačítka posuvného přepínače a navigační prvky umístěné pod samotným posuvníkem, označeny ve formě kruhů.

Pro pohodlí jsem kód JavaScript pro změnu snímků přesunul do samostatné metody slide(), ale v této jej pouze připojím k události kliknutí pro každé kulaté tlačítko ve smyčce.

Když kliknete na tlačítka „předchozí snímek“ / „další snímek“, jak vidíte, rozhodl jsem se pouze napodobit kliknutí na odpovídající kruh a určit požadovaný vzhledem k aktuálnímu, který má CSS třída proud.

snímek (prvek)

Metoda „zodpovědná za kouzlo“ samotného kolotoče JavaScriptu, který obsahuje kód, který mění pozice snímků. Na úplném začátku je zavolána metoda setCurrentLink(), o které si povíme něco později.

Jako vstupní parametr je mu předán objekt navigačního tlačítka posuvníku JS ve formě kruhu.

Samotný posuvný vypínač funguje takto:

  • Všechny naše skluzavky jsou navrženy ve formě bloků stejné velikosti, jeden po druhém. Posuvné okno je jen viditelná část prvek obsahující všechny snímky.
  • Určíme odsazení levého okraje aktuálního snímku od levého okraje nadřazený prvek pomocí vlastnosti offsetLeft.
  • A o tuto hodnotu posuneme nadřazený prvek, aby se požadovaný prvek zobrazil v okně posuvníku.
  • Na konci metody je popsáno chování tlačítek „předchozí snímek“/„další snímek“, navržených jako šipky doleva/doprava. Pokud je aktuální snímek prvním z celého seznamu, pak je tlačítko pro přechod na předchozí snímek skryté. Pokud je to druhé, odstraňte tlačítko a přejděte na další snímek.

    setCurrentLink(link)

    Tato metoda naší třídy posuvníků JavaScriptu je zodpovědná za zvýraznění navigačního kulatého tlačítka odpovídajícího aktuálnímu prvku. Tito. pokud máme vybraný druhý snímek, zvýrazní se druhé tlačítko.

    Objekt tlačítka, které má být vybráno jako aktuální, je předán jako vstupní parametr funkci.

    Logika zvýraznění aktuálního prvku je jednoduchá:

  • Dostaneme objekt nadřazeného prvku, kterým je v našem případě kontejner s identifikátorem slider-nav .
  • Všechny navigační prvky získáváme jako pole odkazů.
  • Prvek přijatý jako vstup vybereme přidáním do aktuální třídy.
  • Ve smyčce procházíme všechny navigační prvky a vymažeme hodnotu třídy pro všechny kromě aktuální. To je nezbytné pro zrušení výběru prvku, který byl dříve aktuální tento hovor funkcí.
  • Úplně poslední metoda třídy, která definuje akci při kliknutí na zavírací tlačítko posuvníku ve formě křížku. Zde je kód ve skutečnosti nejsrozumitelnější ze všech obsažených ve třídě posuvníků JS.

    Když kliknete na tlačítko Zavřít, které je přístupné pomocí jeho identifikátoru, prvek posuvníku a prvek, který jej definuje, se ze stránky odstraní. průsvitné pozadí. Získávají se také pomocí jedinečných identifikátorů.

    Samotná metoda se volá uvnitř dříve popsané navigate(), která obsahuje všechny scénáře akcí probíhajících na našem posuvníku JavaScript.

    Mimochodem, pokud chcete zavřít posuvník, když kliknete mimo něj, přidejte do této metody následující kód:

    Document.getElementById("cq-popup-bg").onclick = funkce () ( document.getElementById("cq-popup-bg").remove(); document.getElementById("cq-popup").remove() ;

    Prezentace JavaScriptu založená na vyvinuté knihovně

    Někdy v praxi možná budete muset vytvořit JS rolovací karusel, který se často nazývá prezentace. V mém případě to nebylo vyžadováno, ale přesto jsem se rozhodl vytvořit jeden založený na konečném kódu knihovny pro případ, kdy by to mohlo být užitečné.

    Ve skutečnosti se implementace prezentace v JavaScriptu mírně liší od běžného posuvníku. Rozdíl je pouze v tom, že u slide show se snímky v daném časovém intervalu přepínají automaticky, zatímco u běžného JS karuselu se mění ručně pomocí navigačních prvků.

    SlideShow: function (timeout) ( var sliderCount = this.links.length; var self = this; this.slideCycle = setInterval(function () ( var currentSlideNumber = document.querySelector("#slider-nav a.current").getAttribute ("data-slide" var slideId = parseInt(currentSlideNumber, 10) + 1; self.slide(document.querySelector(""));

    Myslím, že je jasné, co se tady děje. K vytvoření tato metoda Zkopíroval jsem kód z události kliknutí na tlačítka ručního posuvného přepínače a umístil jej dovnitř Volání JavaScriptu funkce setInterval(), která ano specifikovaná akce po určité době.

    Akční skript je předán jako první argument jako anonymní funkce a jako druhý je předán časový interval, který jsem se rozhodl udělat jako proměnnou, jejíž hodnota se předává při volání slideShow().

    Jedinou požadovanou úpravou kódu uvnitř setInterval() bylo určit počet snímků a porovnat s ním index aktuálního snímku, aby se automatické přepínání opakovalo.

    No, aby tento kód fungoval, musí být zavolána samotná metoda. To vše jsem se rozhodl udělat ve stejném navigate(), což je přesně sbírka všemožných skriptů. Volání jsem umístil na úplný konec a jako argument jsem předal hodnotu časového intervalu automatická změna snímky v naší prezentaci JS (vybral jsem 2000 milisekund nebo 2 sekundy, toto číslo můžete podle potřeby změnit):

    Self.slideShow(2000);

    Po té kontrole Práce s JavaScriptem jezdec, nezapomeňte vyčistit prohlížeč.

    Teoreticky by vše mělo fungovat. Pokud ne, prostudujte si chyby v konzoli prohlížeče a podělte se o ně v komentářích.

    Ve výsledku jsme dostali JS slide show, ve které se snímky přepínají automaticky a v kruhu, tzn. když je dosaženo posledního snímku, show přejde do nové smyčky a show začne znovu od úplně prvního prvku.

    Při práci s různé knihovny JS kolotoče obrázků a recenzí, všiml jsem si, že vývojáři tuto praxi aktivně používají, ale s určitým dodatkem. Ve všech řešeních, která jsem viděl, se automatická prezentace přeruší, pokud uživatel ručně přepne. Tak jsem se rozhodl udělat to samé ve své knihovně.

    Pro přerušení automatického zobrazení JavaScriptové snímky carousel, rozhodl jsem se použít standardní JS funkci clearInterval(), které předám jako argument identifikátor časového intervalu, který vrátí funkce setInterval() při jeho nastavení.

    V důsledku toho jsem dostal následující kód, který jsem se rozhodl nepsat jako samostatnou metodu:

    ClearInterval(self.slideCycle);

    A umístil ho na místa, kde jsou po kliknutí popsány akce různé prvky navigace, tzn. v následujícím:

    Link.addEventListener("kliknutí", funkce (e) (...)); self.prevBtn.addEventListener("kliknutí", funkce (e) (...)); self.nextBtn.addEventListener("klik", funkce (e) (...));

    Je lepší volat clearInterval() blíže k samotné události click, hlavní věc je před ní, a ne po ní.

    Integrace jezdce JavaScriptu do webu

    Takže náš posuvník v čistém JS je připraven. Nyní zbývá pouze připojit jej k webu.

    Chcete-li to provést, musíte postupně postupovat podle následujících kroků, které jsou standardní akce při integraci jakékoli třetí strany JavaScriptové knihovny vůbec.

    Krok 1 Soubory knihovny zkopírujeme na naše webové stránky do samostatného adresáře.
    Krok 2 Přidejte následující kód do HTML stránek, kde bude potřeba zobrazit posuvník, a umístěte jej před koncovou značku body:

    Krok 3 Následující kód pro volání karuselu JS umístíme do jakéhokoli existujícího souboru JavaScript, který je součástí stránky po připojení samotného posuvníku:

    Var aSlider = new Slider("#slider");

    Jak můžete vidět, tento kód v podstatě vytváří objekt třídy Slider, který je obsažen v popupSlider.js. Proto by měl být volán až po připojení samotného souboru třídy ke stránce.

    Přidávání nových snímků do kolotoče JavaScriptu

    Vše je zde velmi jednoduché. Vzhledem k tomu, že naše snímky jsou převzaty ze samostatného adresáře knihovny snímků, při přidávání nových obrázků je do ní stačí umístit potřebné soubory, který jim předtím dal stejnou velikost jako ostatním.

    A pak v kódu souboru assets/popupSlider.html add nový blok do kontejneru s id slider-wrapper:

    Text

    V zásadě můžete jednoduše zkopírovat podobný existující a změnit cestu k souboru obrázku a text podpisu (pokud je to vůbec potřeba).

    Budete také muset přidat nový prvek navigace ve formě kruhu, protože na momentálně jeho automatické přidávání dosud nebylo implementováno. Chcete-li to provést, budete muset do kontejneru s ID posuvníku přidat následující kód a napsat jej na úplný konec:

    Hodnota atributu data-slide musí být větší než největší hodnota ostatních prvků. Stačí pouze zvýšit maximální proud o jednu.

    Sbalení kolotoče JS do jednoho skriptu

    To je ono, posuvník na JavaScript připraven a připojeno. Osobně doporučuji používat tuto možnost v praxi, pokud to vůbec potřebujete :)

    Pro urychlení jeho provozu můžete mimochodem dále komprimovat statické komponenty: soubory CSS, HTML a JavaScript. Neudělal jsem to a nabídl jsem vám miniifikovaný kód, protože nyní existuje mnoho frontendových sestavovacích systémů: Gulp, Grunt, Webpack a další. A každý z nich má své vlastní algoritmy pro kompresi a spojování souborů.

    Minifikované výsledky mohou navíc na různých operačních systémech fungovat odlišně. Obecně existuje mnoho důvodů.

    A samotné zdrojové kódy myslím nejsou tak těžké, aby tento postup potřebovaly. Pokud je však potřebujete, nakonfigurujte minifikaci sami s ohledem na váš operační systém a kolektor.

    Jak jsem psal na samém začátku, k vyřešení úkolu, který mi byl původně nastaven, jsem potřeboval získat jeden soubor JS pro správné použití mého posuvníku prostřednictvím služby třetí strany na webu. Z tohoto důvodu jsem přísně vzato nepoužíval hotové knihovny třetích stran.

    Pak se vám bude hodit možnost jediného JavaScript carousel skriptu, protože... veškerý obsah bude obsažen přímo v ní, včetně HTML/CSS kódu, který je v případě knihovny uložen v samostatných souborech.

    Scénář se v mém případě skládá ze dvou částí. První část obsahovala obsah souboru popupSlider.js, který nebudu podruhé prezentovat. Vložte jej sami a odstraňte popis metody loadStatic() a její volání z kódu třídy, protože nebudeme je potřebovat.

    Druhou částí jediného skriptu posuvníku JavaScript pro web je obslužná rutina události DOMContentLoaded, ke které dochází při načítání obsahu stránky.

    Tam přidáme karuselový JS kód na HTML/CSS stránku a vytvoříme objekt třídy Slider, což je ekvivalentní aktivaci samotného slideru.

    Schematicky kód vypadá takto:

    /* obsah popupSlider.js bez popisu metody loadStatic() a jejího volání */ document.addEventListener("DOMContentLoaded", function())( var str = "\ \ /* css kód*/ \ /* html kód*/ "; var div = document.createElement("div"); div.innerHTML = str; document.body.appendChild(div); var aSlider = new Slider("#slider");

    Protože v mém případě byla možnost nahrávání souborů na server zcela uzavřena, musel jsem nahrát obrazové soubory ovládacích prvků kolotoče JavaScriptu do cloudu a místo cest k nim v kódu HTML a CSS napsat odkazy vygenerované při úspora.

    Pokud takové potíže nemáte, nemusíte nic měnit, ale nezapomeňte zkopírovat adresáře knihoven snímků a ovládacích prvků na server a zadat správnými způsoby jim.

    Custom JS slider - vyhlídky na vývoj

    Abych byl upřímný, neplánuji se pouštět do cílené podpory a rozvoje mnou vytvořeného řešení :) V současné době existuje hromada podobných sliderů a malého vozíku, které mají na rozdíl od mého svou historii, jsou důkladně testovány a jsou podporovány velkou komunitou uživatelů a vývojářů.

    Nějak pro mě není zajímavé začít celou tuhle cestu od nuly sám a vytvořit další kolo a vlastně na to nemám čas. Ale na druhou stranu je tento posuvník JavaScriptu vynikající příležitostí k procvičení vývoje refaktorováním jeho kódu a implementací nových zajímavých funkcí, které možná ještě neexistují.

    Pokud tedy stejně jako já potřebujete základ kódu pro experimenty a máte alespoň něco navíc volný čas— zkopírujte kód posuvníku JavaScript, který jsem popsal, nebo se připojte k přispěvatelům na GitHubu. Úložiště je otevřené a odkaz na něj jsem uvedl na začátku článku.

    Pokud chcete zlepšit své front-endové dovednosti na mém výtvoru, mohu vám dokonce poskytnout malý seznam úprav a vylepšení, které kód potřebuje a které by vás mohly zajímat z hlediska jejich implementace:

  • proveďte externí konfiguraci, abyste mohli pohodlně nakonfigurovat posuvník;
  • umožnit vložení posuvníku dovnitř stránky (v současnosti je navržen pouze jako vyskakovací);
  • asynchronní načítání HTML kód (nyní synchronní, který je v mnoha prohlížečích označen jako zastaralý);
  • zabalit knihovnu jako balíček, NPM, Bower nebo jiný balíček, aby ji bylo možné nainstalovat a spravovat závislosti pomocí správců balíčků;
  • přizpůsobte rozložení pro použití karuselu JS na různých zařízeních;
  • provádět přepínání snímků na základě události Swipe pro mobilní uživatele.
  • Seznam úprav, které jsem uvedl, samozřejmě není konečný a lze jej doplnit. Napište své návrhy, myšlenky a přání do komentářů pod článkem a sdílejte je se svými přáteli prostřednictvím sociální média zapojit je také do vývoje.

    Žádám vás, abyste můj kód neposuzovali přísně, protože jak jsem již řekl, nepovažuji se za specialistu na Frontend a nejsem. Jsem také otevřený všem vašim připomínkám ke stylu kódování a doufám, že se od vás mohu něco naučit a vy ode mě, tzn. plnit hlavní účel vývoje a podpory produktů OpenSource.

    Připojte se k projektovým komunitám, přihlaste se k odběru aktualizací a dokonce mi můžete pomoci i finančně pomocí formuláře přímo pod článkem, pokud jsem vám mohl s něčím pomoci nebo se vám prostě líbí, co dělám :)

    Mám všechno! Vše nejlepší! 🙂

    P.S. : pokud potřebujete webové stránky nebo potřebujete provést změny na stávajících, ale není na to čas ani chuť, mohu nabídnout své služby.

    Více než 5 let zkušeností profesní rozvoj stránky. Práce s PHP, OpenCart, WordPress, Laravel, Yii, MySQL, PostgreSQL, JavaScript, React, Angular a dalšími technologiemi pro vývoj webu.

    Zkušenosti s vývojem projektů různé úrovně: vstupní stránky, firemní weby, internetové obchody, CRM, portály. Včetně podpory a rozvoje projektů HighLoad. Přihlášky zasílejte e-mailem [e-mail chráněný].

    /* Tady začíná náš kolotoč. Block.carousel-wrapper je umístěn relativně, wrapper.carousel-item je umístěn absolutně. . */ .carousel-wrapper( position:relative; /* Absolutně umístěné rámečky získávají výšku a šířku od svého rodiče. Ve výchozím nastavení jsme je zprůhlednili a poté se po kliknutí na links.arrow-prev and.arrow- další. * / .carousel-item( position:absolute; top:0; bottom:0; left:0; right:0; padding:25px50px; opacity:0; transition:all0.5sease-in-out; /* Všiml výplň vlevo a vpravo 50px Tímto způsobem můžeme umístit naše odkazy na šířku 50px. obrázek na pozadí aby odkazy vypadaly jako šipky. Zkontrolujte, zda jste se změnili Adresy URL odkazů s původní adresou URL, aby vaše odkazy nebyly jen průhledné obdélníky. */ .arrow( position:absolute; top:0; display:block; width:50px; height:100%; -webkit-tap-highlight-color:rgba(0,0,0,0); background:url( "/carousel-arrow-dark.png")50%50%/20pxno-repeat /* Vraťme naši šipku doleva */ &.arrow-prev( left:0; ) /* A druhá je k tomu; vpravo stejný obrázek pro šipku, otočím ji o 180 stupňů */ &.arrow-next( right:0; -webkit-transform:rotate(180deg); transform:rotate(180deg); ) ) /* Moc se mi líbí. miluji, jak vypadá kolotoč tmavé pozadí, a pokud má block.carousel-item třídu "light", změníme jeho text na bílý a místo šedých použijeme bílé šipky. Znovu zkontrolujte, zda je cesta k obrázku šipky správná */ &.light( color:white; .arrow( background:url("/carousel-arrow-light.png")50%50%/20pxno-repeat; ) ) /* Napišme dotaz na média pro změnu velikosti šipek na zařízeních se kterými menší velikost screen.*/ @media(max-width:480px)( .arrow,&.light.arrow( background-size:10px; background-position:10px50%; ) ) ) /* Nastavení cílů pro odkazy zobrazenou hodnotu: žádný; Tím se zbavíme toho, že prohlížeč při každém kliknutí na šipky neustále přeskakuje na samý vrchol karuselu. Tato vlastnost je účinná pro všechny prvky, jejichž ID začíná na "target-item". */ ( display:none; ) /* Výše ​​jsme zprůhlednili všechny naše posuvníky karuselu, což znamená, že když se karusel načte, místo toho dostaneme velkou prázdnou krabici. Změňme hodnotu průhlednosti pro první snímek na 1 pro zobrazení. Také jsme nastavili z-index na 2 a umístili jej nad ostatní snímky. */ .item-1( z-index:2; opacity:1; ) /* Ale nechceme, aby první snímek měl vždy hodnotu opacity opacity: 1; jinak se budeme muset prokousat tímto snímkem při otáčení ostatních. */ *:target~.item-1( opacity:0; ) /* ..ale pokud je #target-item-1 zaostřený a chceme zobrazit první snímek, vyberte jej pomocí ikony ~ a nastavte opacity znovu na 1:-) */ #target-item-1:target~.item-1( opacity:1; ) /* Pokud jsou zaostřeny další cílové-položky-#, vyberte je pomocí selektoru ~, plynule zobrazte a umístěte je nahoru pomocí z-indexu: 3. Zde můžete přidat další rozpětí s identifikátorem cílové položky, pokud jich máte více než tři. Lze přidat 10 kusů najednou.. */ #target-item-2:target~.item-2,#target-item-3:target~.item-3( z-index:3; opacity:1; ) )



    
    Nahoru