Lightbox per Javascript nach bestimmten Event öffnen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Lightbox per Javascript nach bestimmten Event öffnen

    Ich versuche mich gerade ein wenig in Javascript einzuarbeiten um das Effektframework mootools besser nutzen zu können. Meine Kenntnisse sind noch sehr rudimentär, mittlerweile kenne ich jedoch die Event Handler, diese führen eine Funktion meist nur nach händischer Aktion aus (Bsplw. oncklick, onmouseover etc.). Ich würde nun gerne folgenden Lightbox Clone aufrufen wenn ein Kontaktformular erfolgreich gesendet wurde:

    Quellcode

    1. window.addEvent('domready',function(){
    2. $$('a').each(function(x){
    3. y = x.getAttribute('rev');
    4. if(navigator.appVersion.indexOf('MSIE') != -1){
    5. if(y != ""){
    6. $(y).setStyle('visibility','hidden');
    7. }
    8. }else{
    9. if(y != null){
    10. $(y).setStyle('visibility','hidden');
    11. }
    12. }
    13. })
    14. })
    15. var xxx = new Array();
    16. $$('a').each(function(el){
    17. if(el.getAttribute('rel') == "designSlide"){
    18. // preload images
    19. a = new Image();
    20. lnk = el.getAttribute('href');
    21. a.src = lnk;
    22. xxx.push(a);
    23. el.addEvent('click',function(x){
    24. // old container still existing? remove it
    25. if($('container') != false){
    26. $('container').remove();
    27. }
    28. //go
    29. bd = document.body;
    30. windowHeight = 0;
    31. windowWidth = 0;
    32. title = el.getAttribute('title');
    33. titleSplitPos = title.indexOf("::");
    34. titleHead = title.substring(0,titleSplitPos);
    35. lengthContent = title.length + titleSplitPos
    36. titleContent = title.substring(titleSplitPos+2,lengthContent);
    37. addContent = el.getAttribute('rev');
    38. if($(addContent) != false){
    39. addContentCont = $(addContent).innerHTML;
    40. $(addContent).setStyle('visibility','hidden');
    41. }
    42. nav = navigator.appName;
    43. windowHeight = window.getHeight() -10;
    44. var x = new Event(x).stop();
    45. var hrefSrc = el.getAttribute('href');
    46. var preloadPrev = new Image();
    47. preloadPrev.src = hrefSrc;
    48. var imgWidth = preloadPrev.width;
    49. var imgHeight = preloadPrev.height;
    50. var space = imgHeight + 40;
    51. var top = windowHeight - space;
    52. // create a new div with the width of the screen
    53. container = new Element('div', {
    54. 'styles':
    55. {
    56. 'display': 'block',
    57. 'visibility':'hidden',
    58. 'width': '99%',
    59. 'height': space,
    60. 'background':'#000',
    61. 'border': '1px solid #AAA',
    62. 'padding':'0px',
    63. 'left':'3px',
    64. 'margin':'0px',
    65. 'position': 'absolute',
    66. 'top': top
    67. }
    68. })
    69. container.setAttribute('id','container');
    70. image = new Element('img', {
    71. 'styles':
    72. {
    73. 'border': '3px solid #FFF',
    74. 'display':'block',
    75. 'visibility': 'hidden',
    76. 'float':'left',
    77. 'background': '#000 url(images/loading.gif) center center no-repeat',
    78. 'margin-top':'20px',
    79. 'margin-left':'20px',
    80. 'height':imgHeight,
    81. 'width': imgWidth,
    82. 'src': hrefSrc,
    83. 'z-index':'1000'
    84. }
    85. })
    86. div = new Element('div', {
    87. 'styles':
    88. {
    89. 'float':'left',
    90. 'width':'300px',
    91. 'height':'auto',
    92. 'display':'block',
    93. 'margin-top':'20px',
    94. 'margin-left':'20px',
    95. }
    96. })
    97. off = new Element('img', {
    98. 'styles':
    99. {
    100. 'float':'left',
    101. 'width':'64px',
    102. 'height':'20px'
    103. }
    104. })
    105. off.src="images/close.jpg";
    106. off.addEvent('click',function(){
    107. container.effect('opacity',{duration: 700, transition: Fx.Transitions.linear, wait:true}).start(0.9,0).chain(function(){
    108. container.remove();
    109. })
    110. })
    111. div.setAttribute('id','info');
    112. if($(addContent) != false){
    113. div.innerHTML = "<h1>" + titleHead + "</h1><p>" + titleContent + "</p>" + "<p>" + addContentCont + "</p>";
    114. }else{
    115. div.innerHTML = "<h1>" + titleHead + "</h1><p>" + titleContent + "</p>";
    116. }
    117. image.src = preloadPrev.src;
    118. container.injectInside(bd);
    119. image.injectInside(container);
    120. image.effect('opacity',{duration: 200, transition: Fx.Transitions.linear, wait:false}).start(0,1);
    121. container.effect('opacity',{duration: 700, transition: Fx.Transitions.linear, wait:false}).start(0,0.9);
    122. container.effect('top',{duration: 700, transition: Fx.Transitions.linear, wait:false}).start(windowHeight-40,top);
    123. div.injectAfter(image);
    124. off.injectInside(div);
    125. container.makeDraggable();
    126. return false;
    127. })
    128. }
    129. })
    Alles anzeigen


    Kann man solch eine Aktion denn wirklich nur nach "cklick" ausführen? [/url]
  • Hi,
    es sind alle Events verfügbar: http://de.selfhtml.org/javascript/sprache/eventhandler.htm
    Einfach ohne das "on" nutzen.

    Ohne Lib würdest du es so machen:

    Quellcode

    1. <form method="post" onsubmit="return func();">


    Mit MooTools machst du es so

    Quellcode

    1. $('formelement').addEvent('submit',function(){
    2. container.effect('opacity',{duration: 700, transition: Fx.Transitions.linear, wait:true}).start(0.9,0).chain(function(){
    3. container.remove();
    4. })
    5. })


    Mfg
  • Aber wenn man doch nun das komplette "mooslide.js" Javascript von oben ausführen will, nachdem zum Beispiel ein anderes Javascript bzw. in meinem Fall ein php Kontaktformular script etwas ausgibt, dann brauche ich doch keinen Event Handler oder? Ich stelle mir das wie folgt vor, hier der Code von meinem Kontaktformular, markiert an den Stellen wo das mooslide Script erscheinen soll:

    Quellcode

    1. <?php
    2. error_reporting(E_NOTICE);
    3. function valid_email($str)
    4. {
    5. return ( ! preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix", $str)) ? FALSE : TRUE;
    6. }
    7. if($_POST['name']!='' && $_POST['e_mail']!='' && valid_email($_POST['e_mail'])==TRUE && strlen($_POST['message'])>30)
    8. {
    9. $to = 'email@janwildefeld.de';
    10. $headers = 'From: '.$_POST['e_mail'].''. "\r\n" .
    11. 'Reply-To: '.$_POST['e_mail'].'' . "\r\n" .
    12. 'X-Mailer: PHP/' . phpversion();
    13. $subject = "Hello from your Website :-)";
    14. $message = htmlspecialchars($_POST['message']);
    15. if(mail($to, $subject, $message, $headers))
    16. {//Hier soll der Lightbox Clone öffnen und ein div mit der id"log res" erzuegen indem folgende Zeile ausgegeben wird
    17. echo 'Thank you '.$_POST['name'].'. Your message was sent';
    18. }
    19. else {
    20. //Hier soll wieder die Lightbox aufgehen und unten stehende Mitteilung ziegen
    21. echo "<span class=\"red\">Message not sent. Please make sure you're not
    22. running this on localhost and also that you
    23. are allowed to run mail() function from your webserver</span>";
    24. }
    25. }
    26. else {
    27. // wiederum soll die Lightbox öffnen
    28. echo "<span class=\"red\">Please make sure you filled all the required fields,
    29. that you entered a valid email and also that your message
    30. contains more then 30 characters.</span>";
    31. }
    32. ?>
    Alles anzeigen


    Der Javascript Code des Kontaktformulars sieht wie folgt aus:

    Quellcode

    1. window.addEvent('domready', function(){
    2. $('myForm').addEvent('submit', function(e) {
    3. new Event(e).stop();
    4. var log = $('log_res').empty().addClass('ajax-loading');
    5. this.send({
    6. update: log,
    7. onComplete: function() {
    8. log.removeClass('ajax-loading');
    9. document.forms['myForm'].reset();
    10. }
    11. });
    12. });
    13. });
    Alles anzeigen


    Das verstehe ich auch beides soweit. Nach Senden des Kontaktformulars wird entweder eine Erfolgsmeldung ausgegeben oder eine Meldung das etwas schief gelaufen ist. Was ich jetzt nicht begreife ist wie ich die Lightbox öffnen kann und den Div Container log und log_res in Ihr anzeigen lassen kann.

    Ferner habe ich Probleme das mooslide Script zu verstehen. Den Tutorials die ich gelesen habe konnte ich bisher immer gut folgen, aber hier kommen viele, für mich , neue Sachen dazu.

    Was bedeutet z.B. in der 3. Zeile die beiden $$ Zeichen vor der runden Klammer? (ich weiß das er dort alle Links nach dem rev Tag durchsucht, aber was bedeuten die beiden $$?

    Was beudetet in Zeile 20 das el bei $$('a').each(function(el){.
    Wieso steht das dort, was bedeutet es, das habe ich in nochc keinem Tutorial so gesehen? Ein x als Varibel ist mir schonmal untergekommen, aber el?
  • Was beudetet in Zeile 20 das el bei $$('a').each(function(el){.

    Bei der Syntax handelt es sich ja um eine anonyme Funktion.. Das el ist also dein Parameter als ob du folendes schreiben würdest

    Quellcode

    1. function blaa(el) {
    2. alert(el);
    3. }

    Die Benennung ist also vollkommen egal.

    Was bedeutet z.B. in der 3. Zeile die beiden $$ Zeichen vor der runden Klammer?

    Also vorweg: Es ist eine ganz normale Funktion - wie z.B.

    Quellcode

    1. function $$(el) {
    2. alert('el');
    3. }


    Details liest du am Besten hier: http://docs.mootools.net/Native/Element.js#$$
    Im Gegensatz zu $() kann es einfach mehrere Objekte selektieren und wendet eine Funktion auf all diese Elemente an.

    Quellcode

    1. <div id="b">easy</div>
    2. <div id="c">coding</div>


    $$('div').setStyle('color', 'red'); würde hier alle Elemente rot färben. Mit nur einem $('div') ginge das ja nicht.

    Was ich jetzt nicht begreife ist wie ich die Lightbox öffnen kann und den Div Container log und log_res in Ihr anzeigen lassen kann.

    Also dein Code oben ist ja riesig. Dieser DesignSlide wird allen Elementen mit dem rel Attribut "designSlide" zugeordnet...

    Quellcode

    1. $$('a').each(function(el){
    2. if(el.getAttribute('rel') == "designSlide"){


    Du willst ein ganz neues Element erstellen und nen Slide machen...
    also so in der Art..

    Quellcode

    1. function macheslide() {
    2. el = document.createElement('div');
    3. //code von 23 bis 148
    4. }