JavaScript

JavaScript je multiplatformní, objektově orientovaný skriptovací jazyk, určený především pro programování dynamických internetových stránek (aplikací).

Ukázky:

JavaScript projekty:

Hlavička dokumentu

U stránek používajících JavaScript je nutné vždy do hlavičky dokumentu doplnit meta informaci o typu skriptovacího jazyka.

Definice JavaScriptu v hlavičce dokumentu:

  ...
  <meta http-equiv="content-script-type" content="text/javascript" />
  <script type="text/javascript">
    /* <![CDATA[ */
      alert('Můj první JavaScript');
    /* ]]> */
  </script>
</head>
<body>
  ...

Připojení externího souboru s JavaScriptem v hlavičce dokumentu:

  ...
  <meta http-equiv="content-script-type" content="text/javascript" />
  <script type="text/javascript" src="muj-skript.js"></script>
</head>
<body>
  ...

Poznámka: IE5- nepodporuje žádný JavaSript.

Příklady

 

Datum a čas

Příklad vložení aktuálního roku:

<script>
  document.write(new Date().getFullYear());
</script>

Typografie na webu

Vložení pevných mezer za definované předložky a spojky:

<script>
  var document;
  function nbsp() {
    var x = document.querySelector("body");
    x.innerHTML = x.innerHTML.replace(/ ([ai]|[kosuvz]|do|ke|na|od|po|se|ve|za|ze) /g, " $1&nbsp;");
  }
  nbsp();
</script>

CSS behavior

CSS vlastnost behavior (chování) podporovaná pouze prohlížečem Internet Explorer umožňuje implementovat JavaScriptu do webových stránek pomocí kaskádových stylů.

Oproti klasickému zápisu JavaScriptu se do každého (X)HTML prvku nemusí psát ovladač (onclick, onmouseover, onmouseout atd.) jehož hodnotou je skript. Stačí pouze (X)HTML prvku přiřadit styl s vlastností behavior, která obsahuje přímo skript nebo adresu na externí soubor s příponou *.htc (HTml Component). HTC komponenta se nejvíce vyplatí u složitých nebo často se opakujících skriptů.

Příklady použití:

  • CSS3 PIE (Progressive Internet Explorer) umožňuje používat některé CSS3 vlastnosti v prohlížeči IE8-
    • border-radius
    • box-shadow
    • border-image
    • CSS3 Backgrounds (-pie-background)
    • Gradients
    • RGBA Color Values
    • PIE Custom Properties
      • -pie-watch-ancestors
      • PNG alpha transparency and -pie-png-fix
      • Lazy Initialization (-pie-lazy-init)
      • Layout polling (-pie-poll)

Průhlednost PNG formátu v IE6

Do hlavičky webové stránky vložte:

<!--[if (gt IE 5)&(lte IE 6)]>
  <link type="text/css" rel="stylesheet" media="screen, projection" href="ie-6.css" />
<![endif]-->

Obsah souboru ie-6.css:

/* obrazky musi mit nastavene rozmery */
img {
  behavior: expression((this.runtimeStyle.behavior="none") && (this.src.toLowerCase().indexOf('.png')>-1) && (this.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + this.src + "', sizingMethod='scale')", this.runtimeStyle.paddingTop = this.height, this.runtimeStyle.height = 0));
  overflow:hidden;
}
/* pozadi se nebude dlazdicove opakovat a bude zarovnano vlevo nahoru */
.png {
  behavior: expression((this.runtimeStyle.behavior = "none") && (this.currentStyle.backgroundImage.toString().toLowerCase().indexOf('.png')>-1) && (this.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + this.currentStyle.backgroundImage.toString().replace('url("','').replace('")','') + "', sizingMethod='crop')", this.runtimeStyle.zoom = 1, this.runtimeStyle.backgroundImage = "none"));
}

Odkazy:

 

Sjednocení vzhledu formulářových prvků

Bližší informace viz Formalize CSS.

jQuery

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 zkoušečka – jquery.jslab.net/zkousecka/#ab6
  • editor zdrojového kódu: PhpStorm, PSPad, Notapad++ atd.
  • webový server: XAMPP, MAMP atd.
  • nástroje pro ladění kódu: Firebug+FireQuery (Firefox), Developer Toolbar (Google, Firefox, IE) atd.
    • konzole
    • kontrolní body (krokování)
    • sledování hodnot proměnných

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.");
});
  • výraz $() je zkrácený zápis funkce jQuery()
  • element h1 je prvek, na který se jQuery apikuje (selector)
  • metoda .text vloží požadovaný osah
  • "funkci $() předáme element h1 na který aplikujeme metodu .text"

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

Selektory

codylindley.com/jqueryselectors – vizulání demonstace selektorů

Příklady selektorů:

  • $('*') – univerzální selektor (všechno)
  • $('.myclass') – všechny prvky obsahující třídu myclass
  • $('#myid') – prvek s jedinečným identifikátorem myid
  • $('div p') – všechny p, které jsou potomky div
  • $('div > p') – všechny p, které jsou přímými potomky div
  • $('div + p') – všechny p, které jsou následujícími sourozenci div
  • $('div:has(p)') – všechny div, které mají alespoň jednoho potomka p
  • $('input:text') – všechny input typu "text" (jen textová pole)
  • $('input:disabled') – všechny zakázané (deaktivované) input
  • $('input[name]') – všechny input, které mají atribut name s libovolnou hodnotou
  • $('input[name^="hodnota"]') – všechny input, jejichž name začíná na "hodnota"
  • $('input[name*="hodnota"]') - všechny input, jejichž name obsahuje text "hodnota"
  • $('input[name!="hodnota"]') – všechny input, jejichž name neobsahuje text "hodnota"
  • $('input[name$="hodnota"]') – všechny input, jejichž name končí na "hodnota"
  • $('a[href^="http"][href*="ano"][href!="ne"][href$=".pdf"]') – odkazy začínající http, obsahující "ano", neobsahující "ne" a končící příponou .pdf
  • $('span:contains('text')') – všechny span, které obsahují "text"
  • $('span:empty') – všechny span, které jsou prázdné (např. nevyplněná pole, prázdné buňky tabulek atd.)
  • $('span:parent') – všechny span, které nejsou prázdné (neprázdný prvek se stává rodičem)
  • $(':input') – všechny formulářové prvky (input, textarea, select a button)
  • $(':animated') – všechny právě animované elementy
  • $(':header') – všechny nadpisy (h1, h2, h3, h4, h5 a h6)
  • $('li:first') – první položka seznamu
  • $('li:not(:first)') – všechny položky seznamu kromě první
  • $('li:last') – poslední položka seznamu
  • $('div:first-child') – všechny div, které jsou prvními potomky
  • $('div:last-child') – všechny div, které jsou posledními potomky
  • $('div:only-child') – všechny div, které jsou jedinými potomky
  • $('tr:nth-child(even)') – sudé řádky tabulky (řádky se číslují od nuly, proto není použito odd)
  • $('td:eq(3)') – 4. buňky tabulky (indexuje se od nuly)
  • $('td:gt(3)') – buňky tabulky, které mají větší než 3. indexové pořadí (páté a větší)
  • $('td:lt(3)') – buňky tabulky, které mají menší než 3. indexové pořadí (třetí a menší)

Metody

.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

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;
});

Příklady

Parallax

Parallax efekt – obrázky a video na pozadí:

  • Implement a Simple Parallax Effect
    • 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";
          });
      });
  • Wordpress
  • Drupal
  • Další
    • Skrollr
    • sequencejs.com/themes/sliding-horizontal-parallax
    • github.com/IanLunn/jQuery-Parallax
    • pixelcog.github.io/parallax.js
    • github.com/flesler/jquery.scrollTo

Příklad parallax efektu: wwws.superfish.com

Plovoucí blok - Skyscraper

julianware.com/jquery-scroll-follow-sticky-fixed-sidebar yes

  • // 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

  • respektuje výchozí umístění od horního okraje
  • nepřekryje obsah patičky
  • pohyb obsahuje efekt animace

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)

  • respektuje rozměry obklopujícího prvku
  • Demo viz příloha

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řílohaVelikost
sticky-element-in-wrapper-on-scroll.zip40.3 KB

Akordeon

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řílohaVelikost
akordeon.zip39.94 KB

Dynamické chování

jQuery Waypoints

  • Sticky Elements
  • Infinite Scroll
  • Dial Controls
  • Scroll Analytics

Dynamické rozmístění obsahu

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).

Google API

Google Maps Marker Animations

Grafické efekty

jQuery Flat Shadow – vržený stín

Intro Loader

factory.brainleaf.eu/jqueryIntroLoader

Obtékání textu okolo obrázku

http://www.jwf.us/projects/jQSlickWrap/

Ovládání pomocí klávesnice

  • Jquery-spinner - ovládání číselných polí pomocí klávesnice

Posun obsahu (scrolling)

PřílohaVelikost
Correct CSS margin (jquery.simplyscroll)12.1 KB

Slider

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:

Slideshow

jQuery Slideshow podporující dotyková gesta.

Stejná výška prvků

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í.

  1. Do stránky připojte jQuery knihovnu, skripty jquery.equalHeights.js a jquery.pxem.js (převod z px na em v em-based layoutech) skripty obsažené v arichvu eaualheights.zip.
      ...
      <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>
      ...
  2. Vytvořte soubor jquery.settings.js s níže uvedeným obsahem a upravte požadované selektory dle potřeb (skript se spustí automaticky po načtení celé stránky):
    $(document).ready(function(){
      // vyber selektoru
      $("#box1, #box2, .boxes ... etc.").equalHeights({ relative: true });  
    });

Další možnosti:

  • CSS Demo of Equal Height Columns - Full Cross-Browser CSS. No CSS Hacks. No Images. No JavaScript.
  • Unify Heights
  • /*
    * 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();
    });
  • Resize iFrame to Fit Content (Same Domain Only)
  • iframe Auto Adjust Height as content changes
  • /*
    * 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řílohaVelikost
equalheights.zip2.63 KB

Text a odkazy

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:

  • jFontSize – jque.re/plugins/effects-ui/jfontsize

Twitter

Zobrazení příspěvku zvoleného uživatele:

  • coda.co.za/content/projects/jquery.twitter

Validace formuláře

  • Validate – jqueryvalidation.org
  • Validity – validity.thatscaptaintoyou.com

Trvalé zobrazení hlavní navigace pomocí jQuery a CSS

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řílohaVelikost
fixed-menu-on-scroll.zip40.12 KB

Upozornění a dialog

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();
    });
    
  • Příklad CSS
  • .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í

Vysouvání (Slide Out and In):

  • funkce slideToggle()
  • funkce animate()
    • ​vysunutí zespodu nahoru
      • ​<!-- 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;
        }
    • boční vysunutí
      • přidána detekce RTL, upraven směr a přidáván (odebíran) CSS styl
      • <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);
        }

Zvýraznění obrázkové mapy

Efekt grafického zvýraznění obrázkové mapy využívající jQuery rozšíření Map Hilight.

PřílohaVelikost
map-hilight.zip70.75 KB

Řazení dat v tabulce

Pomocí jQuery pluginu TableSort je možné řadit data v tabulce dle záhlaví:

  • detekce typu dat (datum, číslo atd.)
  • současné řazení více sloupců (klávesa Shift)
PřílohaVelikost
tablesorter.zip17.8 KB

Dean Edwards IE

Dean Edwards IE je JavaScriptová knihovna umožňující naučit Internet Explorer W3C standardům:

  • opravuje mnoho HTML a CSS problémů
  • umožňuje používat transparentní PNG obrázky

Nevýhody:

  • funkční pouze ve webovém prohlížeči se zapnutou podorou JavaScriptu
  • vyžaduje strojový čas pro vykonání skriptu (nevhodné u velmi pomalých počítačů)
  • velikost v základní konfiguraci cca 30kB (zůstává v cache)
  • nic není dokonalé – vždy se mohou vyskytnout neočekávané situace
PřílohaVelikost
DeanEdwardsIE.zip25.04 KB

HTML5 script

HTML5 enabling script umožňuje prohlížeči Internet Explorer rozpoznat HTML5 prvky.

Modernizr

Viz modul Modernizr.

Otevření odkazu do nového okna (záložky)

<p>Webová standardizační organizace <a href="http://www.w3.org"
 type="text/html" charset="utf-8" hreflang="en" xml:lang="en"
 lang="en" title="The World Wide Web Consortium"
 onclick="return !window.open(this.href);" 
 onkeypress="return !window.open(this.href);">W3C</a></p>

 

Automatické otevření nového okna po načtení obrázku

Pozice left, top platí pro  IE4+, pozice screenX, screenY platí pro Netscape 4+

<img src="obrazek.jpg" onload="window.open('http://www.google.cz/',
'reklama', 'width=600, height=400, left=100, top=100,
screenX=100, screenY=100, location=no, directories=no,
status=no, menubar=no, toolbar=no, copyhistory=no,
scrollbars=yes, resizable=yes');"
alt="Popis obrázku"/>

 

Průhlednost PNG formátu v IE6-

IE6- neumí zobrazit průhlednost u PNG obrázků. Můžete jej to ovšem naučit :)

Pokud webový prohlížeč neumí zobrazit PNG průhlednost, zobrazí místo ní barvu nastavenou jako barvu pozadí při ukládání obrázku.

Pouze obrázky

  1. Z níže uvedeného kódu vytvořte soubor s názvem fix-png.js, který umístěte do svého webu např. do adresáře scripts/
    /*
      Correctly handle PNG transparency in Win IE 5.5 & 6. http://homepage.ntlworld.com/bobosola 
    */
    var arVersion = navigator.appVersion.split("MSIE")
    var version = parseFloat(arVersion[1])
    if ((version >= 5.5) && (document.body.filters)) {
      for(var i=0; i<document.images.length; i++) {
        var img = document.images[i]
        var imgName = img.src.toUpperCase()
        if (imgName.substring(imgName.length-3, imgName.length) 
         == "PNG") {
          var imgID = (img.id) ? "id='" + img.id + "' " : ""
          var imgClass = (img.className) ? "class='" + img.className 
           + "' " : ""
          var imgTitle = (img.title) ? "title='" + img.title 
           + "' " : "title='" + img.alt + "' "
          var imgStyle = "display:inline-block;" + img.style.cssText
          if (img.align == "left") imgStyle = "float:left;" + imgStyle
          if (img.align == "right") imgStyle = "float:right;" + imgStyle
          if (img.parentElement.href) imgStyle = "cursor:hand;" 
           + imgStyle
          var strNewHTML = "<span " + imgID + imgClass + imgTitle
           + " style=\"" + "width:" + img.width + "px; height:" 
           + img.height + "px;" + imgStyle + ";"
           + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
           + "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>"
          img.outerHTML = strNewHTML
          i = i-1
        }
      }
    }
  2. Do hlavičky stránky vložte níže uvedený kód s odkazem na soubor fix-png.js
    <meta http-equiv="content-script-type" content="text/javascript" />
    <!--[if (lte IE 7)&(gte IE 5)]>
      <script defer type="text/javascript" src="scripts/fix-png.js">
      </script>
    <![endif]-->

IE5- nepodporuje žádný JavaSript.

Obrázky a obrázkové mapy

  1. Z níže uvedeného kódu vytvořte soubor s názvem fix-png-map.js, který umístěte do svého webu např. do adresáře scripts/
    /*
      Correctly handle PNG transparency in Win IE 5.5 & 6.
      http://homepage.ntlworld.com/bobosola/imagemap.htm
    */
    var strGif = "scripts/transparentpixel.gif"
    var strFilter = "progid:DXImageTransform.Microsoft.AlphaImageLoader"
    var arVersion = navigator.appVersion.split("MSIE")
    var version = parseFloat(arVersion[1])
    if ((version >= 5.5) && (document.body.filters)) {
      for(var i=0; i<document.images.length; i++) {
        var img = document.images[i]
        var imgName = img.src.toUpperCase()
        if (imgName.substring(imgName.length-3, imgName.length)
         == "PNG") {
          var imgID = (img.id) ? "id='" + img.id + "' " : ""
          var imgClass = (img.className) ? "class='" + img.className 
           + "' " : ""
          var imgTitle = (img.title) ? "title='" + img.title
           + "' " : "title='" + img.alt + "' "
          var imgStyle = "display:inline-block;" + img.style.cssText 
          if (img.align == "left") imgStyle = "float:left;" + imgStyle
          if (img.align == "right") imgStyle = "float:right;" + imgStyle
          if (img.parentElement.href) imgStyle = "cursor:hand;"
           + imgStyle
          if (img.useMap) {  
    	var strAddMap = "<img style=\"position:relative; left:-"
             + 0 + "px; top:" + 0 +"px;" + "height:" + img.height
             + "px;width:" + img.width +"\" " + "src=\"" + strGif
             + "\" usemap=\"" + img.useMap + "\" border=\"" + img.border
             + "\"></span>"
    	var strNewHTML = "<span " + imgID + imgClass + imgTitle
             + " style=\"" + "width:" + img.width + "px; height:"
             + img.height + "px;" + imgStyle + ";" + "filter:"
             + strFilter + "(src=\'" + img.src + "\',
             sizingMethod='scale');\">" 
    	strNewHTML += strAddMap
          }
          else {
    	var strNewHTML = "<span " + imgID + imgClass + imgTitle
            + " style=\"" + "width:" + img.width + "px; height:"
            + img.height + "px;" + imgStyle + ";" + "filter:"
            + strFilter + "(src=\'" + img.src + "\',
            sizingMethod='scale');\"></span>"
          } 
          img.outerHTML = strNewHTML
          i = i-1
        }
      }
      for(i=0; i < document.forms.length; i++)
       findImgInputs(document.forms(i))
    }
    function findImgInputs(oParent) {
      var oChildren = oParent.children
      if (oChildren) {
        for (var i=0; i < oChildren.length; i++) {
          var oChild = oChildren(i)
          if ((oChild.type == 'image') && (oChild.src)) {
    	var origSrc = oChild.src
            oChild.src = strGif
            oChild.style.filter = strFilter + "(src='" + origSrc + "')"
          }
          findImgInputs(oChild)
        }
      }
    }
    
  2. Vyptvořte si průhledný obrázek o velikosti 1x1 px ve formátu GIF s názvem např. transparentpixel.gif, který umístěte do svého webu např. do adresáře scripts/. V případě jiného umístění obrázku upravte ve skriptu proměnnou strGif.
  3. Do hlavičky stránky vložte níže uvedený kód s odkazem na soubor fix-png.js
    <meta http-equiv="content-script-type" content="text/javascript" />
    <!--[if (lte IE 7)&(gte IE 5)]>
      <script defer type="text/javascript" src="scripts/fix-png-map.js">
      </script>
    <![endif]-->

IE5- nepodporuje žádný JavaSript.

PřílohaVelikost
transparentpixel.gif43 bajtů
fix-png.js.txt1.48 KB
fix-png-map.js.txt2.63 KB

Oprava vzhledu elementu <object> v IE7-

IE7- nastavuje u elementu <object> vlastní okraje, rámeček a vertikální posuvník. Tomuto chování je možné zabránit:

  1. z níže uvedeného kódu vytvořte soubor s názvem fix-object.js, který umístěte do svého webu např. do adresáře scripts/
    function fixObjectImages () {
      var objs = document.getElementsByTagName ('object');
      for (n = 0; n < objs.length; n++) {
        var obj = objs [n];
        if ((obj != null && obj.type != null) && ((obj.type ==
         "image/png") || (obj.type == "image/jpeg") || (obj.type ==
         "image/gif"))) {
          fixObject (obj);
        }
      }
    }
    function fixObject (obj) {
      obj.body.style.margin = '0';
      obj.body.style.border = 'none';
      obj.body.style.overflow = 'hidden';
    }
    // Do this only for IE!
    window.onload = fixObjectImages; 
  2. do hlavičky stránky vložte níže uvedený kód s odkazem na soubor fix-object.js
    <meta http-equiv="content-script-type" content="text/javascript" />
    <!--[if (lte IE 7)&(gte IE 5)]>
      <script type="text/javascript" src="scripts/pngfix.js">
      </script>
    <![endif]-->

IE5- nepodporuje žádný JavaSript

Cvičení 7

Pomocí přiložených dat přidejte do obrázkové mapy ve fotogalerie ze cvičení 5 šipky pro přechod na předchozí a následující fotografii.

PřílohaVelikost
data-cviceni-7.zip2.11 KB
js-formular.zip65.75 KB

Kulaté rožky

Kulaté rožky je možné vytvářet pomocí CSS vlastnosti border-radius.

Curvy Corners

Curvy Corners používají k vytovření kulatých rožků JavaScript.

Níže uvedený příklad použije JavaScript na vytváření kulatých rožků vždy (zvyšuje zátěž počítače):

  ...
  <style type="text/css">
    /* <![CDATA[ */
      .rounded {
        background-color: #ff0;
        border: 3px solid #f00;
      }
    /* ]]> */
  </style>
  <meta http-equiv="content-script-type" content="text/javascript" />
  <script type="text/javascript" src="scripts/curvycorners.js"></script>
  <script type="text/javaScript">
    /* <![CDATA[ */
      addEvent(window, 'load', initCorners);
      function initCorners() {
        var settings = {
          tl: {radius: 20},
          tr: {radius: 20},
          bl: {radius: 20},
          br: {radius: 20},
          antiAlias: true
        }
        curvyCorners(settings, ".rounded");
      }
    /* ]]> */
  </script>
</head>
<body>
  <h1>Curvy Corners</h1>
  <div class="rounded">
    Content
  </div>
  ...

Níže uvedený příklad použije JavaScript pouze v případě, kdy prohlížeč nepodporuje CSS3 vlastnot border-radius:

  ...
  <style type="text/css">
    /* <![CDATA[ */
      .rounded {
        background-color: #ff0;
        border: 3px solid #f00;
/* Do rounding (native in Firefox and Safari) */ border-radius: 20px; -webkit-border-radius: 20px; -moz-border-radius: 20px; } /* ]]> */ </style> <meta http-equiv="content-script-type" content="text/javascript" /> <script type="text/JavaScript" src="scripts/curvycorners.js"></script> </head> <body> <h1>Curvy Corners</h1> <div class="rounded"> Content </div> ...

Nifty Corners

Nifty Corners nabízí další způsob vytvoření kulatých rožků.

PřílohaVelikost
curvycorners-2.0.4.zip188.9 KB
curvy-corners-css.zip2.66 KB

Překrytí stránky

Colorbox – a jQuery lightbox (obrázky včetně "Retina", stránky, multimédia)

Lightbox2 – pouze obrázky

Shadowbox – obrázky, stránky, multimédia

Greybox – obrázky, stránky, multimédia

Média

mediaelementjs.com – HTML5 přehrávač enlightened