Pdf/BaladeNature/Js/balade_nature.js
author Patrick PIERRE <patrick.pierre@prismallia.fr>
dim., 17 juin 2012 20:52:13 +0200
changeset 17 aa8a171c5430
child 74 58e48a5c5ca2
permissions -rw-r--r--
Ajout d'un JS avec effet glow
// $Id$
// balade_nature

var text = null;
var spot = null;
var box = null;
var boxProperty = '';


window.addEvent('domready', function(){
    // Tooltips
    (function initialize() {
        $$(".pdocImagePulse").each(function(pulse) {
            var mainImg  = pulse.getParent().getElement("img");
            var pulseImg = pulse.getElement("img");
            var tooltip  = $(pulse.get('id')+"t");
            mainImg.setStyle("max-width", "none");
            var pulseWidth  = 100 * pulseImg.getSize().x / mainImg.getSize().x;
            var pulseHeight = 100 * pulseImg.getSize().y / mainImg.getSize().y;
            var mainImgRealWidth = mainImg.getSize().x;

            pulse.setStyles({
                "width": pulseWidth + "%", "height": pulseHeight + "%",
                "left": (pulse.getStyle("left").toFloat() - pulseWidth/2) + "%",
                "top":  (pulse.getStyle("top").toFloat() - pulseHeight/2) + "%"
            });
            pulseImg.setStyle("width", "100%");
            mainImg.setStyle("max-width", "100%");
            mainImg.getParent().setStyle("max-width", "100%");

            var fontSize = tooltip.getStyle("font-size").toFloat();
            tooltip.setStyles({
                "opacity": 0, "display": "block",
                "font-size": (fontSize * mainImg.getSize().x / mainImgRealWidth)
                    + tooltip.getStyle("font-size").replace(fontSize, "")
            });
            
            var tooltipImg = tooltip.getElement("img");
            if (tooltipImg) {
                tooltip.setStyle(
                    "width", (100 * tooltipImg.getSize().x / mainImgRealWidth) + "%");
                tooltipImg.setStyle("width", "100%");
            }
        });

        $$(".pdocImagePulse").addEvent("click", function() {
            var pulse   = this;
            var tooltip = $(this.get('id')+"t");
            pulse.setStyle("display", "none");
            tooltip.tween("opacity", 1);
            (function() {
                tooltip.tween("opacity", 0);
                pulse.setStyle("display", "block");
            }).delay(12000);
        });
        
        $$(".pdocImageTooltip").addEvent("click", function() {
            this.tween("opacity", 0);
            $(this.get('id').substr(0, this.get('id').length-1))
                .setStyle("display", "block");
        });
    }).delay(50);
     
    // Effect: glow
    var effectGlow = $("effectGlow");
    if (effectGlow) {
        text = $("effectGlowText");
        spot = $("effectGlowSpot");
        box = $("effectGlowBox")
        if (typeof box.style.webkitBoxShadow == 'string') {
            boxProperty = 'webkitBoxShadow';
        } else if (typeof box.style.MozBoxShadow == 'string') {
            boxProperty = 'MozBoxShadow';
        } else if (typeof box.style.boxShadow == 'string') {
            boxProperty = 'boxShadow';
        }

        if (text && spot && box) {
            effectGlow.onmousemove = onMouseMove;
            effectGlow.ontouchmove = function (e) {
                e.preventDefault();
                e.stopPropagation();
                onMouseMove({clientX: e.touches[0].clientX, clientY: e.touches[0].clientY});
            }
        }
    }
});


function onMouseMove(e) {
    if (typeof e === 'undefined' || typeof e.clientX === 'undefined') {
        return;
    }
    
    var xm = (e.clientX - Math.floor(window.innerWidth / 2)) * 0.4;
    var ym = (e.clientY - Math.floor(window.innerHeight / 3)) * 0.4;
    var d = Math.round(Math.sqrt(xm*xm + ym*ym) / 5);
    text.style.textShadow = -xm + 'px ' + -ym + 'px ' + (d + 10) + 'px black';
    
    if (boxProperty) {
        box.style[boxProperty] = '0 ' + -ym + 'px ' + (d + 30) + 'px black';
    }
    
    xm = e.clientX - Math.floor(window.innerWidth / 2);
    ym = e.clientY - Math.floor(window.innerHeight / 2);
    spot.style.backgroundPosition = xm + 'px ' + ym + 'px';
}