Posts Tagged JavaScript
iPhone Click Event Delay
It appears that the iPhone has a built-in delay of about 300ms before firing the click event. This is most likely to give the user time to make a gesture, such as scrolling the page. In some cases, though, this may not be desired. For instance, if you make a mobile web app that doesn’t scroll, there’s no reason to wait 300ms every time the user clicks.
In these cases, the trick is to use ontouchstart instead of onclick.
JavaScript Image Rotator Viewer
Posted by grandecomplex in JavaScript on June 15, 2008
See a demo at http://www.alexgrande.com
It is the images on the top right.
I wrote this in Object Oriented format so you can use it again and again on the same page.
Javascript:
var ImageGallery = new Function();
ImageGallery.prototype = {
initialize: function(mainImage, listWrapper){
// large image that is shown
this.mainImage = document.getElementById(mainImage);
// a list of all the anchors for the thumbnails. Must be a tags for graceful degradation
this.thumbnails = document.getElementById(listWrapper).getElementsByTagName("a");
// 0 image is shown already so the first one we want to switch to is the next image or 1
this.i = 1;
// this is a work around to allow calling this within nested functions
var Scope = this;
// Here starts the rotating of the image by first focusing the thumbnail, then switch the primary image
this.start = setInterval(function(){
Scope.focusCall();
// Here we choose 5 seconds in between each image change. You may want to change this.
}, 5000);
// This lets the browser know to do something if one of the thumbnails is clicked
this.clickEvent();
},
// This stops the rotation of the thumbnails. We do that if the user clicks one of them
stop: function(){
if (this.start)
clearInterval(this.start);
},
// When an thumbnail loses focus we must use this css class now
resetBorderColor: function(reset){
reset.getElementsByTagName("img")[0].className="thumbnailDefault";
},
// When the thumbnail gains focus we most give it the corresponding styles
focusBorderColor: function(focused){
focused.getElementsByTagName("img")[0].className="thumbnailFocus";
},
// Here we grab the href of the a tags and make their path be the path of the current image
imageRotator: function(){
this.mainImage.src = this.thumbnails[this.i].href;
this.previousImage = this.thumbnails[this.i];
this.i++;
// This closes the loop for the rotation
if (this.i == this.thumbnails.length)
this.i = 0;
},
// We focus the thumbnail
focusCall: function(){
// reset the last image that was shown
if (typeof this.previousImage != 'undefined')
this.resetBorderColor(this.previousImage);
// Remember the newer one
this.currentImage = this.thumbnails[this.i];
// Give the newer image some focus
this.focusBorderColor(this.currentImage);
var Scope = this;
// Les that have image rotate to the new one 300 miliseconds after the thumbnails get the css focus
window.setTimeout(function(){
Scope.imageRotator()
// You may want to change this number
}, 300);
},
// This is what happens when you click the thumbnails
clickEvent: function(){
var Scope = this;
for (k = 0; k < this.thumbnails.length; k++) {
this.thumbnails[k].onclick = function(){
if (typeof Scope.previousImage != 'undefined')
Scope.resetBorderColor(Scope.previousImage);
Scope.focusBorderColor(this);
// Stop the rotation
Scope.stop();
// This is where the switching happens for the click
Scope.mainImage.src = this.href;
Scope.previousImage = this;
// Make sure to not allow default behavior of the a tag
return false;
}
}
}
}
This is to load it on the window object and create an instance of the viewer
var imageGallery1 = new ImageGallery();
// Not sure where I got this.. I didn't write this but it allows you to load multiple functions on the window.onload.
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != "function") {
window.onload = func;
} else {
window.onload = function() {
oldonload();
func();
}
}
}
var onLoad = function() {
imageGallery1.initialize("index_largepic_display", "index_thumbnail_display");
}
addLoadEvent(onLoad);
For the version on my homepage alexgrande.com here is the CSS and HTML. The CSS is up to you but I suggest following a similar mode with the HTML
HTML:
<div id="gallery">
<ul id="index_thumbnail_display">
<li>
<a href="images/index/fernlarge.jpg" >
<img class="thumbnailDefault" src="images/index/fernthumb.jpg" alt="A picture of a fern just as it is unraveling in front of a log." />
</a>
</li>
<li>
<a id="partythumb" href="images/index/partylarge.jpg" >
<img class="thumbnailDefault" src="images/index/partythumb.jpg" alt="Downtown Seattle at night." />
</a>
</li>
<li>
<a id="alexthumb" href="images/index/alexlarge.jpg" >
<img class="thumbnailDefault" src="images/index/alexthumb.jpg" alt="I'm on a laptop at night in a field on using the internet via hacking a telephone box...legally." />
</a>
</li>
<li>
<a href="images/index/trucks.jpg" >
<img class="thumbnailDefault" alt="Trucks lined up in Sodo in Seattle at night." src="images/index/trucksthumb.jpg" />
</a>
</li>
</ul>
<img id="index_largepic_display" src="images/index/fernlarge.jpg" alt="A picture of a fern just as it is unraveling in front of a log." />
</div>
CSS:
div#gallery {
position:relative;
float: left;
overflow: hidden;
width: 65%;
}
img#index_image_display {
border:1px black solid;
margin-bottom:20px;
}
ul#index_thumbnail_display {
list-style-type:none;
position:absolute;
top: 0;
left: 0;
margin-top: 15px;
}
ul#index_thumbnail_display li a {
padding:10px;
}
.thumbnailDefault {border: 1px solid gray !important;}
.thumbnailFocus {border: 1px solid red !important;}
Saving State: What To Do When Users Leave
Posted by admin in JavaScript on June 12, 2008
In this era of rich JavaScript applications, so much
focus is given to the features of the application that one
crucial element is often overlooked: What happens when the
user leaves the page? We take it for granted that pages
will look the same when we leave and return, but a new
question merges for sites using rich JavaScript
interaction: If the user leaves and returns to the page,
will the application state be preserved? Read the rest of this entry »
Recursive Functions in JavaScript
Posted by admin in JavaScript on May 14, 2008
Recursive functions are functions which conditionally call themselves. A common use for recursive functions is anywhere you need to iterate on data, where you would normally use a for() or while() loop. Read the rest of this entry »
IE Plugin to Detect JavaScript Memory Leaks
Posted by admin in JavaScript on April 25, 2008
Microsoft has released a free beta version of a plugin for Internet Explorer that looks for memory leaks. The plugin, plainly titled JavaScript Memory Leak Detector (download), is available immediately and tests for both IE6 and IE7 leaks. Read the rest of this entry »
Firebug Tutorial: Getting Started
Posted by admin in JavaScript on March 21, 2008
Firebug is a plugin for Firefox that greatly aids CSS and JavaScript debugging. This guide will walk you through installing Firebug and using some of its functionality, including debugging JavaScript, inspecting the DOM and editing CSS on the fly. Read the rest of this entry »

Activity
Geir Freysson
Andrew DiFiore
zeming
Arun, Neil, shashwat
Eric, Fernando Zanatta, Jörn Zaefferer