 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
09.04.2008, 12:45
|
#1
|
|
TP-Insider
Registriert seit: Nov 2002
Ort: Orscholz
|
Moodalbox - Close Button oben hin?
Hallo,
ich verwende die Moodalbox (sowas wie Lightbox, nur für Inhalte) und möchte
hier den CLOSE-BUTTON oben hin haben, nicht unten. Leider sind meine JS
Kenntnisse eher beschränkt, um hier genau herauslesen zu können, was ich
ändern muss, damit er diesen über den Content schreibt. Wäre schön, wenn
jemand ne Idee dazu hätte  Erzeugt wird dieser Part in Zeile 80.
Code:
/******************************************************************/
/* MOOdalBox 1.2.1 */
/* A modal box (inline popup), used to display remote content */
/* loaded using AJAX, written for the mootools framework */
/* by Razvan Brates, razvan [at] e-magine.ro */
/******************************************************************/
/* http://www.e-magine.ro/moodalbox */
/******************************************************************/
/* */
/* MIT style license: */
/* http://en.wikipedia.org/wiki/MIT_License */
/* */
/* mootools found at: */
/* http://mootools.net/ */
/* */
/* Original code based on "Slimbox", by Christophe Beyls: */
/* http://www.digitalia.be/software/slimbox */
/******************************************************************/
// Constants defined here can be changed for easy config / translation
// (defined as vars, because of MSIE's lack of support for const)
var _ERROR_MESSAGE = "Leider trat ein Fehler beim Laden des Inhalts auf.<br /><br />" +
"Bitte noch einmal probieren.<br /><br />" +
"<em>Zum Schließen einfach irgendwo klicken.</em>"; // the error message displayed when the request has a problem
var _RESIZE_DURATION = 400; // Duration of height and width resizing (ms)
var _INITIAL_WIDTH = 250; // Initial width of the box (px)
var _INITIAL_HEIGHT = 250; // Initial height of the box (px)
var _CONTENTS_WIDTH = 746; // Actual width of the box (px) ### changed for DGP
var _CONTENTS_HEIGHT = 582; // Actual height of the box (px) ### changed for DGP
var _DEF_CONTENTS_WIDTH = 500; // Default width of the box (px) - used for resetting when a different setting was used
var _DEF_CONTENTS_HEIGHT = 400; // Default height of the box (px) - used for resetting when a different setting was used
var _ANIMATE_CAPTION = true; // Enable/Disable caption animation
var _EVAL_SCRIPTS = false; // Option to evaluate scripts in the response text
var _EVAL_RESPONSE = false; // Option to evaluate the whole response text
// The MOOdalBox object in its beauty
var MOOdalBox = {
// init the MOOdalBox
init: function (options) {
// init default options
this.options = Object.extend({
resizeDuration: _RESIZE_DURATION,
initialWidth: _INITIAL_WIDTH,
initialHeight: _INITIAL_HEIGHT,
contentsWidth: _CONTENTS_WIDTH,
contentsHeight: _CONTENTS_HEIGHT,
defContentsWidth: _DEF_CONTENTS_WIDTH,
defContentsHeight: _DEF_CONTENTS_HEIGHT,
animateCaption: _ANIMATE_CAPTION,
evalScripts: _EVAL_SCRIPTS,
evalResponse: _EVAL_RESPONSE
}, options || {});
// scan anchors for those opening a MOOdalBox
this.anchors = [];
$A($$('a')).each(function(el){
// we use a regexp to check for links that
// have a rel attribute starting with "moodalbox"
if(el.rel && el.href && el.rel.test('^moodalbox', 'i')) {
el.onclick = this.click.pass(el, this);
this.anchors.push(el);
}
}, this);
// add event listeners
this.eventKeyDown = this.keyboardListener.bindWithEvent(this);
this.eventPosition = this.position.bind(this);
// init the HTML elements
// the overlay (clickable to close)
this.overlay = new Element('div').setProperty('id', 'mb_overlay').injectInside(document.body);
// the center element
this.center = new Element('div').setProperty('id', 'mb_center').setStyles({width: this.options.initialWidth+'px', height: this.options.initialHeight+'px', marginLeft: '-'+(this.options.initialWidth/2)+'px', display: 'none'}).injectInside(document.body);
// the actual page contents
this.contents = new Element('div').setProperty('id', 'mb_contents').injectInside(this.center);
// the bottom part (caption / close)
this.bottom = new Element('div').setProperty('id', 'mb_bottom').setStyle('display', 'none').injectInside(document.body);
this.closelink = new Element('a').setProperties({id: 'mb_close_link', href: '#'}).injectInside(this.bottom);
this.caption = new Element('div').setProperty('id', 'mb_caption').injectInside(this.bottom);
new Element('div').setStyle('clear', 'both').injectInside(this.bottom);
this.error = new Element('div').setProperty('id', 'mb_error').setHTML(_ERROR_MESSAGE);
// attach the close event to the close button / the overlay
this.closelink.onclick = this.overlay.onclick = this.close.bind(this);
// init the effects
var nextEffect = this.nextEffect.bind(this);
this.fx = {
overlay: this.overlay.effect('opacity', { duration: 500 }).hide(),
resize: this.center.effects({ duration: this.options.resizeDuration, onComplete: nextEffect }),
contents: this.contents.effect('opacity', { duration: 500, onComplete: nextEffect }),
bottom: this.bottom.effects({ duration: 400, onComplete: nextEffect })
};
this.ajaxRequest = Class.empty;
},
click: function(link) {
return this.open (link.href, link.title, link.rel);
},
open: function(sLinkHref, sLinkTitle, sLinkRel) {
this.href = sLinkHref;
this.title = sLinkTitle;
this.rel = sLinkRel;
this.position();
this.setup(true);
this.top = Window.getScrollTop() + (Window.getHeight() / 15);
this.center.setStyles({top: this.top+'px', display: ''});
this.fx.overlay.custom(0.8);
return this.loadContents(sLinkHref);
},
position: function() {
this.overlay.setStyles({top: Window.getScrollTop()+'px', height: Window.getHeight()+'px'});
},
setup: function(open) {
var elements = $A($$('object'));
elements.extend($$(window.ActiveXObject ? 'select' : 'embed'));
elements.each(function(el){ el.style.visibility = open ? 'hidden' : ''; });
var fn = open ? 'addEvent' : 'removeEvent';
window[fn]('scroll', this.eventPosition)[fn]('resize', this.eventPosition);
document[fn]('keydown', this.eventKeyDown);
this.step = 0;
},
loadContents: function() {
if(this.step) return false;
this.step = 1;
// check to see if there are specified dimensions
// if not, fall back to default values
var aDim = this.rel.match(/[0-9]+/g);
this.options.contentsWidth = (aDim && (aDim[0] > 0)) ? aDim[0] : this.options.defContentsWidth;
this.options.contentsHeight = (aDim && (aDim[1] > 0)) ? aDim[1] : this.options.defContentsHeight;
this.bottom.setStyles({opacity: '0', height: '0px', display: 'none'});
this.center.className = 'mb_loading';
this.fx.contents.hide();
// AJAX call here
var nextEffect = this.nextEffect.bind(this);
var ajaxFailure = this.ajaxFailure.bind(this);
var ajaxOptions = {
method: 'get',
update: this.contents,
evalScripts: this.options.evalScripts,
evalResponse: this.options.evalResponse,
onComplete: nextEffect,
onFailure: ajaxFailure
};
this.ajaxRequest = new Ajax(this.href, ajaxOptions).request();
return false;
},
ajaxFailure: function (){
this.contents.setHTML('');
this.error.clone().injectInside(this.contents);
this.nextEffect();
this.center.setStyle('cursor', 'pointer');
this.bottom.setStyle('cursor', 'pointer');
this.center.onclick = this.bottom.onclick = this.close.bind(this);
},
nextEffect: function() {
switch(this.step++) {
case 1:
// remove previous styling from the elements
// (e.g. styling applied in case of an error)
this.center.className = '';
this.center.setStyle('cursor', 'default');
this.bottom.setStyle('cursor', 'default');
this.center.onclick = this.bottom.onclick = '';
this.caption.setHTML(this.title);
this.contents.setStyles ({width: this.options.contentsWidth + "px", height: this.options.contentsHeight + "px"});
if(this.center.clientHeight != this.contents.offsetHeight) {
this.fx.resize.custom({height: [this.center.clientHeight, this.contents.offsetHeight]});
break;
}
this.step++;
case 2:
if(this.center.clientWidth != this.contents.offsetWidth) {
this.fx.resize.custom({width: [this.center.clientWidth, this.contents.offsetWidth], marginLeft: [-this.center.clientWidth/2, -this.contents.offsetWidth/2]});
break;
}
this.step++;
case 3:
this.bottom.setStyles({top: (this.top + this.center.clientHeight)+'px', width: this.contents.style.width, marginLeft: this.center.style.marginLeft, display: ''});
this.fx.contents.custom(0,1);
break;
case 4:
if(this.options.animateCaption) {
this.fx.bottom.custom({opacity: [0, 1], height: [0, this.bottom.scrollHeight]});
break;
}
this.bottom.setStyles({opacity: '1', height: this.bottom.scrollHeight+'px'});
case 5:
this.step = 0;
}
},
keyboardListener: function(event) {
// close the MOOdalBox when the user presses CTRL + W, CTRL + X, ESC
if ((event.control && event.key == 'w') || (event.control && event.key == 'x') || (event.key == 'esc')) {
this.close();
event.stop();
}
},
close: function() {
if(this.step < 0) return;
this.step = -1;
for(var f in this.fx) this.fx[f].clearTimer();
this.center.style.display = this.bottom.style.display = 'none';
this.center.className = 'mb_loading';
this.fx.overlay.chain(this.setup.pass(false, this)).custom(0);
return false;
}
};
Window.onDomReady(MOOdalBox.init.bind(MOOdalBox));
Gruß
Elli
__________________
Es gibt keinen Fortschritt ohne den Glauben an die Zukunft.
[JFK]
|
|
|
10.04.2008, 12:36
|
#2
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
das muss doch über css gehen (#mb_bottom)
|
|
|
10.04.2008, 20:39
|
#3
|
|
TP-Insider
Registriert seit: Nov 2002
Ort: Orscholz
|
So, habens heute Nachmittag gelöst.
Nein - leider geht das nicht über pures CSS zu lösen. Habe sogar
in dem Forum dazu diesen Hinweis erhalten, dass dies zur Zeit nur
über JS geht, kombiniert mit CSS.
Lösung: Die Elemente werden einfach der Reihe nach in den DOM
geschrieben. Das haben wir hoch gezogen. Dann muss man noch
die Werte für Top korrigieren. Die Angabe wird auch per JS direkt
rein geschrieben und wird für die Top-Ausrichtung nicht wirklich
benötigt >
Code:
this.bottom.setStyles({top: '5px', width: this.contents.style.width, marginLeft: this.center.style.marginLeft, display: ''});
Die 5 px sind hier der top Abstand, wenn man den Border auch auf
5 gestellt hat.
That's it 
__________________
Es gibt keinen Fortschritt ohne den Glauben an die Zukunft.
[JFK]
|
|
|
20.05.2008, 05:06
|
#4
|
|
TP-Newbie
Registriert seit: May 2008
|
Hab' da eine weitere Frage zur Moodalbox.
Weiß jemand ob und wenn wie es möglich ist mehrere Moodalboxen miteinander zu verknüpfen? Also wie z.B. bei der Lightbox... durch rel="lightbox[bild1]" und rel="lightbox[bild2]" sodass dann beim drüberfahren ein "next" oder "previous" kommt!?
Vielen Dank für eure Mühen!
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 07:48 Uhr.
|
 |