jQuery je JavaScriptová knihovna, která zjednodušuje použití JavaScriptu v HTML dokumentu.
jQuery umožňuje vytvářet interaktivní webové aplikace. Funkčnost jQuery je možné dále rozšiřovat pomocí tzv. "zásuvných modulů", které nabízejí již hotová řešení nejčastějích požadavků.
Typickým příkladem použítí mohou být např. reakce na události, okamžitá validace formuláře již při jeho vyplňování, nejrůznější animace, bez nutnosti používat technologii Flash, jednoduchá spolupráce s AJAX technologií atd.
Co budeme potřebovat:
jQuery knihovnu je možné k dokumentu připojit v hlavičce dokumentu interně (jQuery knihovna je součástí webové stránky) nebo externě např. pomocí odkazů na jQuery CDN, Google CDN nebo Miscrosoft CDN.
Zajištění dostupnosti jQuery knihovny (1. z CDN zdroje, 2. z lokálního umístění):
<script type="text/javascript" src="http://code.jquery.com/jquery-1.11.2.min.js"></script>
<script type="text/javascript">
if (!window.jQuery) {
var jq = document.createElement('script'); jq.type = 'text/javascript';
jq.src = '/path-to-your/jquery.min.js';
document.getElementsByTagName('head')[0].appendChild(jq);
}
</script>Funkce "Dokument je připraven ke zpracování jQuery" + změna obsahu H1 (příkaz se provede ihned po načtení stromové struktury stránky DOM (Document Object Model) tj. ještě před načtením externího obsahu např. obrázků):
$(document).ready(function() {
$("h1").text("Nový text tagu H1.");
});Vkládání textu před a za:
... <body> <h1>jQuery</h1> </body> ...
$(document).ready(function() {
$("h1").prepend("Knihovna ");
$("h1").append(" je skvělá.");
});Příklad automatického skrytí prvku:
$(document).ready(function(){
$(".my-css-class").hide(1000);
});.my-css-class – CSS selektor
.hide – jQuery metoda
Příklad výpisu proměnné do konzole webového prohlížeče (Developer Toolbar):
$(document).ready(function(){
var text = "Text vypsaný v konzole.";
console.log(text);
});Detekce existence elementu:
if ($("#myID").length) {
$("#myID").show();
}Výhody použití Behaviors v Drupalu
codylindley.com/jqueryselectors – vizulání demonstace selektorů
Příklady selektorů:
.text – změna obsahu
.val – získání/přiřazení hodnoty
.prepend – vložení obsahu před
.append – vložení obsahu za
.hide – skrytí
.addClass – přidání třídy
.css – nastavení kaskádového stylu
Události umožňují interakci s uživatelem (reakce na myš, klávesnici atd.).
Načtení dokumentu (pomocí metody .ready):
$(document).ready(function() {...});je možné zkrátit na:
$().ready(function() {...});Klepnutí myší:
$().ready(function() {
$('.test').click(function() {
$(this).css('background', 'green');
});
});Ukázka shodného zápisu:
$('.my-selector').click(function(e) {
e.preventDefault();
});
$('.my-selector').click(function() {
return false;
}); Parallax efekt – obrázky a video na pozadí:
jQuery(document).ready(function($) {
// Set the background-attachment for body to "fixed" so that
// we can control it's scroll speed.
$('body').css('background-attachment', 'fixed');
// Attach a function to watch the window.scroll event, and
// move the background image slower than the content scroll.
$(window).scroll(function () {
document.body.style.backgroundPosition = "0px " + (0 – (Math.max(document.documentElement.scrollTop, document.body.scrollTop) / 4)) + "px";
});
});Příklad parallax efektu: wwws.superfish.com
julianware.com/jquery-scroll-follow-sticky-fixed-sidebar ![]()
// Float block + Sticky navigation
$(function() {
scrollPoint = 100, // Distance to scroll before sticking
topPadding = 100, // Fixed minimum distance from top of window
bottomPadding = 40, // Adjustment to scrolling element point of deactivation at footer
$window = $(window),
documentHeight = $(document).height(),
$sticky = $('.float-block'), // Scrolling element
$footer = $('footer'), // Footer container
$sidebar = $('.content'), // Sidebar Container
sidebarHeight = $sidebar.outerHeight(),
footerHeight = $footer.outerHeight(),
offset = $sticky.offset(),
stop = sidebarHeight - $sticky.height() - 15,
$menu = $('#main-menu');
});
function floatBlock() {
if (($window.scrollTop() > offset.top - scrollPoint) && ($window.scrollTop() < (documentHeight - footerHeight) - sidebarHeight + bottomPadding)) {
if (($window.scrollTop() - offset.top + topPadding) < stop) {
$sticky.stop().animate({marginTop: $window.scrollTop() - offset.top + topPadding},0); // Last number is drag animation duration
}
else {
$sticky.stop().animate({marginTop: stop},0);
}
$menu.addClass('affix'); // Sticky navigation
} else {
$sticky.stop().animate({marginTop: 0},0); // Input same drag animation duration as above
$menu.removeClass('affix'); // Sticky navigation
}
}
$(window).scroll(function(){
floatBlock();
});Plovoucí (floating div) SkyScraper reklama
JS:
$(document).ready(function(){
var skyscraperAd = $("#skyscraper");
var skyscraperOffset = skyscraperAd.offset().top;
var skyscraperBottom = $("#footer").offset().top – skyscraperAd.height();
$(window).scroll(function() {
skyscraperAd.stop();
var windowTop = $(window).scrollTop();
if (windowTop > skyscraperOffset) {
if (windowTop > skyscraperBottom) windowTop = skyscraperBottom;
if (windowTop < 0) windowTop = 0;
skyscraperAd.animate({top: windowTop + 'px'}, 'fast');
} else
skyscraperAd.animate({top: skyscraperOffset + 'px'}, 'fast');
});
});CSS:
#skyscraper {
position: absolute;
top: 300px;
left: 50%;
margin-left: 500px;
width: 120px;
height: 600px;
}Plovoucí blok respektující obklopující prvek (např. postranní sloupec – sidebar)
JS:
/**
* Sticky element in the wrapper on scroll
*/
var jQuery = jQuery.noConflict();
jQuery("document").ready(function($){
$(window).scroll(function () {
var sticky = $(".sticky");
var wrapper = $(".wrapper");
var top = $(window).scrollTop();
var wrapperTop = wrapper.offset().top;
var wrapperBottom = wrapperTop + wrapper.height();
var normalPosition = wrapperBottom - sticky.height();
if (wrapperTop < top && normalPosition > top) {
sticky.addClass("sticky-top");
sticky.removeClass("sticky-bottom");
} else {
sticky.removeClass("sticky-top");
if (wrapperBottom > top && normalPosition < top) {
sticky.addClass("sticky-bottom");
} else {
sticky.removeClass("sticky-bottom");
}
}
});
});CSS:
/**
* Sticky element in the wrapper on scroll
*/
body {
min-height: 2000px; /* optional */
}
.wrapper {
position: relative;
height: 300px; /* optional */
background: #eee; /* optional */
}
.sticky {
width: 300px; /* optional */
background: #ccc; /* optional */
}
.sticky-top {
position:fixed;
top: 0;
}
.sticky-bottom {
position: absolute;
bottom: 0;
}| Příloha | Velikost |
|---|---|
| sticky-element-in-wrapper-on-scroll.zip | 40.3 KB |
Efekt rozbalování s sbalování obsahu využívající jQuery rozšíření Collapser.
Demo viz přiložený archiv akordeon.zip.
Zjednodušenou variantou (samozřemě vyžaduje jQuery knihovnu) může být také:
<!-- show-hide -->
<script type="text/javascript">
$(document).ready(function() {
$('.show-hide').hide();
$('a.toggle_link').click(function() {
$(this).next('div.show-hide').toggle();
return false;
});
});
</script>Kdy se po kliku na odkaz:
<a href="#" class="toggle_link">Více</a>
Skryje obsah elementu s třídou .show-hide:
<div class="show-hide">...</div>
| Příloha | Velikost |
|---|---|
| akordeon.zip | 39.94 KB |
Masonry automaticky "skládá" obsah stránky dle volného místa (jQuery).
Columnizer umožňuje zalomit dlouhý úzký obsah do více sloupců (jQuery).
jQuery Flat Shadow – vržený stín
factory.brainleaf.eu/jqueryIntroLoader
| Příloha | Velikost |
|---|---|
| Correct CSS margin (jquery.simplyscroll) | 12.1 KB |
Posuvník (JqueryUI Slider) se používá pro změnu číselných hodnot v určitém rozsahu.
Výhodou posuvníku je, že všechny zvolené hodnoty jsou platné (brání vložení chybné hodnoty).
Příklady:
jQuery Slideshow podporující dotyková gesta.
Pokud potřebujete zajistit na stránce stejnou výšku některých prvků (tj. zjistit maximální výšku a nastavit ji u všech ostatních) jistě se Vám bude hodit níže uvedené řešení.
... <meta http-equiv="content-script-type" content="text/javascript" /> <script type="text/javascript" src="jquery-1.6.4.min.js"></script> <script type="text/javascript" src="jquery.equalHeights.js"></script> <script type="text/javascript" src="jquery.pxem.js"></script> <script type="text/javascript" src="jquery.settings.js"></script> </head> <body> ...
$(document).ready(function(){
// vyber selektoru
$("#box1, #box2, .boxes ... etc.").equalHeights({ relative: true });
});Další možnosti:
/*
* Unify Heights
*
* <div id="container">
* <div id="sidebar"></div>
* <div id="content"></div>
* </div>
*
*//*
$(function() {
function unifyHeights() {
var maxHeight = 0;
$('#container').children('#sidebar, #content').each(function() {
var height = $(this).outerHeight();
// alert(height);
if (height > maxHeight) {
maxHeight = height;
}
});
$('#sidebar, #content').css('height', maxHeight);
}
unifyHeights();
});/*
* iframe Auto Adjust Height as content changes
*
* <div id="main">
* <div id="navigation"></div>
* <div id="content">
* <iframe></iframe>
* </div>
* </div>
*
* html, body, #main {
* margin: 0;
* padding: 0;
* height: 100%;
* }
*
*/
$(function() {
// Resize iFrame Height to Fit Content
function ResizeIframe() {
var mainHeight = $('#main').outerHeight();
var navHeight = $('#navigation').outerHeight();
var contenHeight = mainHeight - navHeight;
$('iframe').css('height', contenHeight);
}
// Resize
ResizeIframe();
// Try to change the iframe size every 2 seconds
setInterval(function() {
ResizeIframe();
}, 2000);
});| Příloha | Velikost |
|---|---|
| equalheights.zip | 2.63 KB |
Práce s textem (odstranění, úprava, vložení):
$(document).ready(function(){
$('#block-1 .text').remove();
$('#block-1 .title').text('Nadpis');
$('#block-1 .link').append('<a href="#">Odkaz</a>');
});Příklad úpravy URL adresy:
$(document).ready(function(){
$('#block-1 .content a').each(function(){
$(this).attr('href', 'http://www.myweb.cz' + $(this).attr('href'));
});
});Změna velikosti textu zvoleného prvku:
Zobrazení příspěvku zvoleného uživatele:
Ukázka Fixed menu on scroll (soubory ke stažení).
Zdroj:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs">
<head>
<meta charset="utf-8" />
<title>Fixed menu on scroll</title>
<meta name="description" content="How to make fixed menu on scroll with jQuery and CSS" />
<meta name="keywords" content="fixed,menu,scroll" />
<link rel="shortcut icon" type="image/x-icon" href="favicon.ico" />
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/fixed-menu-on-scroll.js"></script>
<link rel="stylesheet" type="text/css" href="css/style.css" />
</head>
<body>
<div class="header">Brand</div>
<div class="main-menu">
<ul class="clearfix">
<li><a href="#">Home</a></li>
<li><a href="#">jQuery</a></li>
<li><a href="#">CSS</a></li>
</ul>
</div>
<h1>Fixed menu on scroll</h1>
<p>Make fixed menu on scroll with jQuery and CSS.</p>
</body>
</html>jQuery:
/**
* Fixed menu on scroll
*/
var jQuery = jQuery.noConflict();
jQuery("document").ready(function($){
var nav = $('.main-menu');
$(window).scroll(function () {
if ($(this).scrollTop() > 110) {
nav.addClass("fixed");
} else {
nav.removeClass("fixed");
}
});
});CSS:
/**
* Fixed menu top on scroll
*/
.fixed {
position: fixed;
top: 0;
left: 0;
z-index: 999;
width: 100%;
}
| Příloha | Velikost |
|---|---|
| fixed-menu-on-scroll.zip | 40.12 KB |
Modální upozornění:
$("#alert").hover(
function() {
alert("Your book is overdue.");
}
);Modální upozornění vytvořené pomocí jQuery Dialog:
// Inserting modal information message when clicking on the link
$('#dialog a').click(function(event) {
var link = $(this).attr('href');
// create message
$(this).append('<div id="message" title="AKCE">Výprodej!</div>');
// show message as dialog
$(function() {
$("#message").dialog({
modal: true,
resizable: false,
buttons: {
Ok: function() {
// close dialog
$(this).dialog("close");
// execute a link
location.href = link;
}
}
});
});
// stop link execution
return false; //event.preventDefault();
});
.ui-dialog .ui-widget-header {
background: #ffb321;
color: #7f3300;
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
}
.ui-dialog .ui-button {
background: #d6007f;
color: #fff;
box-shadow: none;
}Další možnosti:
Vysouvání (Slide Out and In):
<!-- Slide Toggle -->
<div class="slide-toggle">
<p>Lorem ipsum dolor sit amet.</p>
</div>/**
* Slide Toggle
*/
var jQuery = jQuery.noConflict();
jQuery("document").ready(function($){
var toggle = $('.slide-toggle');
$(toggle).click(function(){
if(toggle.css("bottom") == "0px") {
toggle.animate({bottom: "-60px"}, 1000);
} else {
toggle.animate({bottom: "0px"}, 1000);
}
return false;
});
});/**
* Slide Toggle
*/
.slide-toggle {
position: fixed;
bottom: -60px;
left: 60%;
z-index: 99;
margin: 0;
height: 300px;
cursor: pointer;
}<div id="block-block-2"> <h2 class="block-title">Announcement Area</h2> <div class="content"> <p>Lorem ipsum dolor sit amet.</p> </div> </div>
/**
* Slide Toggle
*/
$('#block-block-2 .block-title').click(function(){
if ($("body").css("direction").toLowerCase() == "rtl") {
if($("#block-block-2").css("right") == "-170px") {
$("#block-block-2").animate({right: "0"}, 1000);
$("#block-block-2").addClass('in');
} else {
$("#block-block-2").animate({right: "-170px"}, 1000);
$("#block-block-2").removeClass('in');
}
} else {
if($("#block-block-2").css("left") == "-170px") {
$("#block-block-2").animate({left: "0"}, 1000);
$("#block-block-2").addClass('in');
} else {
$("#block-block-2").animate({left: "-170px"}, 1000);
$("#block-block-2").removeClass('in');
}
}
return false;
});/**
* Slide Toggle
*/
#block-block-2 {
position: absolute;
top: 100px;
left: -170px; /* LTR */
width: 200px;
}
#block-block-2 .block-title {
position: absolute;
left: 70px; /* LTR */
top: 99px;
width: 228px;
height: 30px;
line-height: 27px;
cursor: pointer;
text-align: center;
font-weight: normal;
font-size: 16px;
background: #ff0000;
color: #fff;
-webkit-transform: rotate(-90deg);
-moz-transform: rotate(-90deg);
-o-transform: rotate(-90deg);
-ms-transform: rotate(-90deg);
writing-mode: lr-tb;
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
}Efekt grafického zvýraznění obrázkové mapy využívající jQuery rozšíření Map Hilight.
| Příloha | Velikost |
|---|---|
| map-hilight.zip | 70.75 KB |
Pomocí jQuery pluginu TableSort je možné řadit data v tabulce dle záhlaví:
| Příloha | Velikost |
|---|---|
| tablesorter.zip | 17.8 KB |