KOMPOOS.NL

blinds transition - cross browser

home » javascripts » transitions » blinds-transition.html

sitemap


voorbeeld blinds transition procedure

blinds plaatje 1
vorige - volgende

uitleg blinds transition

Plaats de stylesheet in de head-sectie van de pagina, de html-code en het script in de body-sectie, waarbij het script zo laag als mogelijk op de pagina geplaatst moet worden. Vul bij new show_blinds (onderaan het script) de adressen van de afbeeldingen in en bij function laad_blinds_plaatjes de url van het eerste plaatje. Het geheel valideert op html5 en het script is volgens de JSLint-norm foutloos.

stylesheet voor de transition


<style type="text/css">
        #blinds_navigatie a{
                padding:10px}   
        #blinds_container{
                position:relative;
                width:340px;
                height:226px;
                margin-bottom:80px}
        #blinds_transition{
                position:absolute;
                width:340px;
                height:226px;
                margin:20px}
        #blinds_navigatie{
                position:absolute;
                bottom:-45px;
                left:10px}
</style>

javascript voor de blinds transition procedure


<script>
/*global window: false */
/*global alert: false */
var de_blinds_transition;
var snelheid_transition = 120,
i,
e,
e2,
w,
h,
_blinds,
x_i,
y_i,
j,
_blinds2;
var show_blinds = function() {
    this.initialize.apply(this, arguments);
};
show_blinds.prototype = {
    achtergrondkader: 'transparent',
    lamel_breedte: 0.05,
    _blinds_height_prc: 1,
    _blinds_width: 0,
    _blinds_height: 0,
    transition_element_id: 'blinds_transition',
    transition_element: null,
    transition__element: null,
    plaatjes_element: null,
    het_volgende_plaatje: null,
    vorige_id: 'vorige',
    volgende_id: 'volgende',
    image_list: [],
    transition_function: 'draai_de_blinds',
    image_transition: function(id) {
        return this.transition_function + '(\'' + id + '\')';
    },
    welke_blind: function(i, j) {
        return Math.log(Math.abs(i)) / Math.log(10) * 400 + j * 50;
    },
    initialize: function(images, options) {
        this.image_list = images;
        if (options && options.tiles_x) {
            this.lamel_breedte = 1 / options.tiles_x + 'px';
        }
        if (options && options.tiles_y) {
            this._blinds_height_prc = 1 / options.tiles_y + 'px';
        }
        if (options && options.transition) {
            this.transition_function = options.transition;
        }
        if (options && options.welke_blind) {
            this.welke_blind = options.welke_blind;
        }
        if (options && options.volgende_id) {
            this.volgende_id = options.volgende_id;
        }
        if (options && options.vorige_id) {
            this.vorige_id = options.vorige_id;
        }
        this.ophogen = 0;
        try {
            this.transition_element = document.getElementById(this.transition_element_id);
        } catch(e) {
            alert('er is geen element');
        }
        if (document.getElementById(this.volgende_id)) {
            document.getElementById(this.volgende_id).onclick = function() {
                return de_blinds_transition.next();
            };
        }
        if (document.getElementById(this.vorige_id)) {
            document.getElementById(this.vorige_id).onclick = function() {
                return de_blinds_transition.previous();
            };
        }
        try {
            if (this.transition__element) {
                this.image_emelent = document.getElementById(this.transition__element);
            } else {
                for (i = 0; i < this.transition_element.childNodes.length; i++) {
                    if (this.transition_element.childNodes[i].tagName && this.transition_element.childNodes[i].tagName.toUpperCase() == 'IMG') {
                        this.plaatjes_element = this.transition_element.childNodes[i];
                    }
                }
            }
        } catch(e2) {
            alert('geen plaatjes');
        }
        w = this.transition_element.offsetWidth;
        h = this.transition_element.offsetHeight;
        this.transition_element.style.overflow = 'hidden';
        this._blinds_width = w * this.lamel_breedte;
        this._blinds_height = w * this._blinds_height_prc;
    },
    next: function() {
        this.ophogen++;
        if (this.ophogen >= this.image_list.length) {
            this.ophogen = 0;
        }
        this.wissel_blinds_plaatje(this.image_list[this.ophogen]);
        return false;
    },
    previous: function() {
        this.ophogen--;
        if (this.ophogen < 0) {
            this.ophogen = this.image_list.length - 1;
        }
        this.wissel_blinds_plaatje(this.image_list[this.ophogen]);
        return false;
    },
    wissel_blinds_plaatje: function(new_src) {
        this.het_volgende_plaatje = new Image();
        this.het_volgende_plaatje.src = new_src;
        var self = this;
        setTimeout(function() {
            self.setup_blinds_transition(new_src);
        },
        1);
    },
    setup_blinds_transition: function(new_src) {
        if (!this.het_volgende_plaatje.complete || (typeof this.het_volgende_plaatje.naturalWidth != "undefined" && this.het_volgende_plaatje.naturalWidth === 0)) {
            var self = this;
            setTimeout(function() {
                self.setup_blinds_transition(new_src);
            },
            1);
            return;
        }
        x_i = 1 / this.lamel_breedte;
        y_i = 1 / this._blinds_height_prc;
        for (i = 0; i < x_i; i++) {
            for (j = 0; j < y_i; j++) {
                if (! (_blinds = document.getElementById('lamel__blinds_' + i + '_' + j))) {
                    _blinds = document.createElement('div');
                }
                _blinds2 = document.createElement('div');
                _blinds.innerHTML = '';
                _blinds.style.display = 'block';
                _blinds.style.width = this._blinds_width + 'px';
                _blinds.style.height = this._blinds_height + 'px';
                _blinds.style.mozOpacity = 1;
                _blinds.style.textAlign = 'center';
                _blinds.style.zIndex = 100;
                _blinds.style.display = 'block';
                _blinds2.style.width = this._blinds_width + 'px';
                _blinds2.style.height = this._blinds_height + 'px';
                _blinds2.style.mozOpacity = 1;
                _blinds.style.zIndex = 101;
                _blinds2.style.background = this.achtergrondkader + ' url(' + this.plaatjes_element.src + ') -' + (i * this._blinds_width) + 'px -' + (j * this._blinds_height) + 'px no-repeat';
                _blinds.style.position = 'absolute';
                _blinds.style.left = this.plaatjes_element.offsetLeft + i * this._blinds_width + 'px';
                _blinds2.style.margin = 'auto';
                _blinds.style.top = this.plaatjes_element.offsetTop + j * this._blinds_height;
                _blinds.id = 'lamel__blinds_' + i + '_' + j;
                _blinds2.id = 'lamel_i__blinds_' + i + '_' + j;
                _blinds.appendChild(_blinds2);
                if (!document.getElementById('lamel__blinds_' + i + '_' + j)) {
                    this.transition_element.appendChild(_blinds);
                }
                _blinds2.onload = setTimeout(this.image_transition(_blinds2.id), this.welke_blind(i, j));
            }
        }
        this.plaatjes_element.src = new_src;
    }
};
function draai_de_blinds(id) {
    if (parseInt(document.getElementById(id).style.width, 10) < 2) {
        document.getElementById(id).style.display = 'none';
        return;
    }
    if (!document.getElementById(id).style.MozOpacity) {
        document.getElementById(id).style.MozOpacity = 1;
    }
    document.getElementById(id).style.width = parseInt(document.getElementById(id).style.width, 10) * 0.6 + 'px';
    document.getElementById(id).style.MozOpacity = parseFloat(document.getElementById(id).style.MozOpacity) * 0.7;
    document.getElementById(id).style.opacity = parseFloat(document.getElementById(id).style.opacity) * 0.7;
    document.getElementById(id).opacity = parseFloat(document.getElementById(id).opacity) * 0.7;
    setTimeout('draai_de_blinds(\'' + id + '\')', snelheid_transition);
}
window.onload = function() {
    de_blinds_transition = new show_blinds(['http://static.dns5.nl/blinds-transition-1.jpg', 'http://static.dns5.nl/blinds-transition-2.jpg', 'http://static.dns5.nl/blinds-transition-3.jpg', 'http://static.dns5.nl/blinds-transition-4.jpg']);
};
function laad_blinds_plaatjes() {
    document.getElementById("transition_start_1").src = "http://static.dns5.nl/blinds-transition-1.jpg";
}
setTimeout(function() {
    laad_blinds_plaatjes();
},
300);
</script>

html code voor de cross browser blinds transition


<div id="blinds_container">
        <div id="blinds_transition">
                <img id="transition_start_1" alt="blinds plaatje 1" width="340" height="226" src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAApJREFUCJljYAAAAAIAAfRxZKYAAAAASUVORK5CYII=' >
        </div>
        <div id="blinds_navigatie">
                <a href="#" id="vorige">vorige</a> - <a href="#" id="volgende">volgende</a>
        </div>
</div>
Gebruik voor alle voorbeelden op de http://kompoos.nl een valide html5 pagina.