Thank you so much! This is very helpful. I hate using code that I don't understand. I'm bemused that I never understood z-index's behavior in bubbling, but glad that I now do!
On Fri, Sep 17, 2010 at 4:24 PM, Walter Lee Davis <wa...@wdstudio.com>wrote: > Answers inline below... > > > On Sep 17, 2010, at 3:37 PM, Jane Hunter wrote: > > Thanks very much, Walter. I'm inclined to try your approach, but I have a >> couple of questions that,if you could answer them, will help me understand >> it better. First, what is the difference between observe...evt.stop() and >> stopObserving? >> > > It's proactive -- trapping the click before it can go anywhere versus > trying to stop the click after it happens. By creating an element that is > above the rest of your page, and using it to catch the clicks, you pretty > much guarantee that the event will be caught there first. > > > And why would a new div catch the clicks, when >> document.stopObserving('click'), which I've also tried, did not? How does >> Z-index work here? >> > > Imagine your page as a stack of sheets of glass or similar. Each sheet has > a z-index, and the higher it is, the closer to the visitor's eyes it is. The > page itself is at z-index 0. Each element on your page has a z-index. If you > don't explicitly set a z-index, or if you set it to auto, then the browser > will sort this out using source code order and various layout rules to > figure out what lies in front of what. For example, if you had one element > floated right, and another floated left, and then you closed up your browser > window so that they had to overlap -- one element would slide under the > other, and that's z-index:auto at work. So in this case, setting the element > to a ridiculously high number makes it float way up above everything else on > the page. > > > > I'm not familiar with "first()" and hope I'm correct that it makes an >> element a first descendant? >> > > first() is a Prototype thing, it finds the first element in an enumerable > object (in this case an array). Unless you set an id on your page body and > use $('my_body'), you can't access the document.body in Prototype and extend > it for use in all browsers. So the double-dollar function, which I think of > as a souped up example of 'find everything that matches this CSS selector', > is used to find all the 'body' tags in the document (there should only be > one, right) and then first() operates on the result of the double-dollar, > and thus returns the one and only body tag, extended and ready for work. > > What makes the new inserted div a first descendent of the body is the use > of insert({top:cover}); > > insert can either take an object as an argument, or a hash. If you send it > a hash, the key must be one of the following: before, after, top, or bottom. > If you just pass it an object, that object will be inserted at the bottom of > the element, so insert({bottom:foo}) is the same as insert(foo). > > Either form can take a string as the argument, too, as long as it > represents a valid thing to insert. So if you wanted to > insert('<p>Hello</p>) or insert({top:'<hi>Hello</hi1>'}) you could do that. > It will fail quietly if you try to insert something where it doesn't belong, > like trying to add an li to a select or something silly like that. > > Walter > > > >> Again, many thanks; I'll try your approach this evening, >> Jane >> On Fri, Sep 17, 2010 at 2:43 PM, Walter Lee Davis <wa...@wdstudio.com> >> wrote: >> Off the top of my head, I would say observe clicks on a temporary element >> placed over the top of the page and cause them to die, rather than trying to >> disable clicks where you are. By the time your clicks bubble from the >> element they were made on up to the outer shell, it's already too late -- >> the click has fired on that element, then bubbled up to the shell. >> >> if(!$('cover')){ >> var cover = new Element('div',{id:'cover'}); >> cover.setStyle('position:fixed; >> width:100%;height:100%;z-index:1000;top:0;left:0'); >> $$('body').first().insert({top:cover}); >> cover.observe('click',function(evt){evt.stop();}); >> } >> >> later, when everything is ready >> >> $('cover').stopObserving().remove(); >> >> Something like that. >> >> Walter >> >> >> On Sep 17, 2010, at 2:26 PM, Jane Hunter wrote: >> >> Hello, >> I'm making an html/javascript copy of a flash slide-show, probably the >> first of several necessitated by the iPad. Thanks to Prototype, everything >> works well in every browser -- EXCEPT, if the user clicks one of the >> navigation buttons or image buttons before the images are finished loading, >> the display image doesn't position itself correctly. (The images are of >> varying sizes and I caculate their position on the fly.) I've tried this >> (shell being my outermost div), which has no effect at all: >> >> < >> >> script type="text/javascript"> >> document.observe( >> >> "dom:loaded", function() { >> $( >> >> 'shell').stopObserving('click'); >> firstimage(); >> >> }); >> >> </ >> >> script> >> I can disable each of the buttons and inputs, individually, which is >> really lame, plus would make me re-iterate through them to un-disable them >> at the end of the load functions. It would be ideal to disable all the >> buttons at the beginning of the load process and then have an on-complete >> event that will re-enable them (and will work in all browsers). >> >> Is there a way to do that with Prototype? I'd be very grateful for advice >> and suggestions. >> >> Thank you! >> >> Jane Hunter >> >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Prototype & script.aculo.us" group. >> To post to this group, send email to >> prototype-scriptacul...@googlegroups.com. >> To unsubscribe from this group, send email to >> prototype-scriptaculous+unsubscr...@googlegroups.com<prototype-scriptaculous%2bunsubscr...@googlegroups.com> >> . >> For more options, visit this group at >> http://groups.google.com/group/prototype-scriptaculous?hl=en. >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Prototype & script.aculo.us" group. >> To post to this group, send email to >> prototype-scriptacul...@googlegroups.com. >> To unsubscribe from this group, send email to >> prototype-scriptaculous+unsubscr...@googlegroups.com<prototype-scriptaculous%2bunsubscr...@googlegroups.com> >> . >> For more options, visit this group at >> http://groups.google.com/group/prototype-scriptaculous?hl=en. >> >> >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Prototype & script.aculo.us" group. >> To post to this group, send email to >> prototype-scriptacul...@googlegroups.com. >> To unsubscribe from this group, send email to >> prototype-scriptaculous+unsubscr...@googlegroups.com<prototype-scriptaculous%2bunsubscr...@googlegroups.com> >> . >> For more options, visit this group at >> http://groups.google.com/group/prototype-scriptaculous?hl=en. >> > > -- > You received this message because you are subscribed to the Google Groups > "Prototype & script.aculo.us" group. > To post to this group, send email to > prototype-scriptacul...@googlegroups.com. > To unsubscribe from this group, send email to > prototype-scriptaculous+unsubscr...@googlegroups.com<prototype-scriptaculous%2bunsubscr...@googlegroups.com> > . > For more options, visit this group at > http://groups.google.com/group/prototype-scriptaculous?hl=en. > > -- You received this message because you are subscribed to the Google Groups "Prototype & script.aculo.us" group. To post to this group, send email to prototype-scriptacul...@googlegroups.com. To unsubscribe from this group, send email to prototype-scriptaculous+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/prototype-scriptaculous?hl=en.