KOMPOOS.NL

context menu - HTML5

home » manuals » html5 » context-menu.html

sitemap | terug naar het html5 referentie - standaard - overzicht


voorbeeld context menu

uitleg context menu gebeuren

De drie linkjes hierboven staan er eigenlijk "voor spek en bonen". Elke link op deze pagina wordt bij een right-click voorzien van een context menu. De html5-variant heb ik vervangen door een stukje javascript (wat helemaal cross-browser werkt). Als html5 "verder" is, wordt de code op deze pagina er bij geplaatst. Plaats de stylesheet in de head-sectie, en het stukje javascript, zo laag als mogelijk, in de body-sectie.

In dit voorbeeld wordt href = target.href aan het menu "geknoopt"; maar ik neem aan dat duidelijk is dat je elke gewenste functie hiervoor in de plaats kan zetten. Je kan ook zoveel li's toevoegen als je wilt (in de ul met de class "context_menu") en aan elke link een ander id geven.

stylesheet van dit voorbeeld


<style type="text/css">
        .context_menu{
                margin:0;
                padding:0 0 0.2em 0;
                list-style-type:none}
        .context_menu a{
                background:#ccc;
                text-decoration:none;
                color:#000;
                font-weight:bold;
                padding:0.4em 0.4em 0.3em 0.4em;
                font-size:80%}
</style>

javascript voor het context-menu gebeuren


<script>
/*global document: false */
/*global window: false */
function $(id) {'use strict'; return document.getElementById(id); }
var vervanging = false,
    scrollTop,
    scrollLeft,
    mouse_over_context = false,
    geen_context = false,
    target,
    context_menu_inhoud = $('inhoud_context_menu');
function mouse_down(event) {
    'use strict';
    if (geen_context || mouse_over_context) {return; }
    if (event === undefined) {event = window.event; }
    target = event.target !== undefined ? event.target : event.srcElement;
    if (event.button === 2 && target.tagName.toLowerCase() === 'a') {vervanging = true; } else if (!mouse_over_context) {context_menu_inhoud.style.display = 'none'; }
}
function laat_context_zien(event) {
    'use strict';
    if (geen_context || mouse_over_context) {return; }
    if (event === undefined) {event = window.event; }
    target = event.target !== undefined ? event.target : event.srcElement;
    if (vervanging) {$('naar_link').href = target.href;
        if (document.body.scrollTop) {scrollTop = document.body.scrollTop; } else {scrollTop = document.documentElement.scrollTop; }
        if (document.body.scrollLeft) {scrollLeft = document.body.scrollLeft; } else {scrollLeft = document.documentElement.scrollLeft; }
        context_menu_inhoud.style.display = 'none';
        context_menu_inhoud.style.left = event.clientX + scrollLeft + 'px';
        context_menu_inhoud.style.top = event.clientY + scrollTop + 'px';
        context_menu_inhoud.style.display = 'block';
        vervanging = false;
        return false;
        }
}
function init_context_menu() {
    'use strict';
    context_menu_inhoud.onmouseover = function () { mouse_over_context = true; };
    context_menu_inhoud.onmouseout = function () { mouse_over_context = false; };
    document.body.onmousedown = mouse_down;
    document.body.oncontextmenu = laat_context_zien;
}
init_context_menu();
</script>
DesignApplication
html5 icon
context menu HTML5
Bobik+
Last modified: 2011-11-23