//com function addLoadEvent (func) { var oldonload = window.onload; if (typeof window.onload != 'function') { window.onload = func; } else { window.onload = function(){ oldonload(); func(); } } } function insertAfter (newElement,targetElement) { var parent = targetElement.parentNode; if (parent.lastChild == targetElement) { parent.appendChild(newElement); }else { parent.insertBefore(newElement,targetElement.nextSibling); } } function addClass (element,value) { if(!element.className){ element.className = value; } else{ newClassName = element.className; newClassName += ""; newClassName +=value; element.className = newClassName; } } function highlightPage () { if (!document.getElementsByTagName) { return false; } if (!document.getElementById) return false; var headers = document.getElementsByTagName('header'); var navs = headers[0].getElementsByTagName('nav'); var links = navs[0].getElementsByTagName('a'); var linkurl; for (var i = 0; i < links.length; i++) { linkurl = links[i].getAttribute("href"); if (window.location.href.indexOf(linkurl) != -1) { addClass(links[i],"here"); var linktext = links[i].lastChild.nodeValue.toLowerCase(); document.body.setAttribute("id", linktext); } } } //home function moveElement (elementID,final_x,final_y,interval) { if (!document.getElementById) { return false; } if (!document.getElementById(elementID)) { return false; } var elem = document.getElementById(elementID); if (elem.movement) { clearTimeout(elem.movement); } if (!elem.style.left) { elem.style.left = "0px"; } if (!elem.style.top) { elem.style.top = "0px"; } var xpos = parseInt(elem.style.left, 10); var ypos = parseInt(elem.style.top, 10); if (xpos == final_x && ypos == final_y) { return true; } if (xpos < final_x) { var dist = Math.ceil((final_x-xpos)/10); xpos = xpos + dist; } if (xpos > final_x) { var dist = Math.ceil((xpos-final_x)/10); xpos = xpos - dist; } if (ypos < final_y) { var dist = Math.ceil((final_y-ypos)/10); ypos = ypos+dist; } if (ypos > final_y) { var dist = Math.ceil((ypos-final_y)/10); ypos = ypos-dist; } elem.style.left = xpos + "px"; elem.style.top = ypos + "px"; var repeat = "moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")"; elem.movement = setTimeout(repeat,interval); } function prepareSlideshow () { if (!document.getElementsByTagName) return false; if (!document.getElementById) return false; if (!document.getElementById("intro")) return false; var intro = document.getElementById('intro'); var slideshow = document.createElement("div"); slideshow.setAttribute("id", "slideshow"); var frame = document.createElement("img"); frame.setAttribute("src", "images/frame.gif"); frame.setAttribute("id", "frame"); slideshow.appendChild(frame); var preview = document.createElement("img"); preview.setAttribute("src", "images/slideshow.gif"); preview.setAttribute("alt", 'which you'); preview.setAttribute("id", "preview"); slideshow.appendChild(preview); insertAfter(slideshow,intro); var links = document.getElementsByTagName("a"); var destination; for (var i = 0; i < links.length; i++) { links[i].onmouseover = function () { destination = this.getAttribute("href"); if (destination.indexOf("index.html") != -1) { moveElement("preview",0,0,5); } if (destination.indexOf("about.html") != -1) { moveElement("preview",-150,0,5); } if (destination.indexOf("photos.html") != -1) { moveElement("preview",-300,0,5); } if (destination.indexOf("live.html") != -1) { moveElement("preview",-450,0,5); } if (destination.indexOf("contact.html") != -1) { moveElement("preview",-600,0,5); } } } } // About function showSection (id) { var sections = document.getElementsByTagName("section"); for (var i = 0; i < sections.length; i++) { if (sections[i].getAttribute('id') != id) { sections[i].style.display = "none"; } else { sections[i].style.display = "block"; } } } function prepareInternalnav () { if(!document.getElementById) { return false; } if(!document.getElementsByTagName){ return false; } var articles = document.getElementsByTagName("article"); if (articles.length === 0) { return false;} var navs = articles[0].getElementsByTagName("nav"); if (navs.length === 0) { return false;} var links = navs[0].getElementsByTagName("a"); for (var i = 0; i < links.length; i++) { var sectionId = links[i].getAttribute("href").split("#")[1]; if (!document.getElementById(sectionId)) { continue;} document.getElementById(sectionId).style.display = "none"; links[i].destination = sectionId; links[i].onclick = function () { showSection(this.destination); return false; } } } //photos function showPic (whichpic) { if (!document.getElementById('placeholder')) { return false; } var source = whichpic.getAttribute("href"); var placeholder = document.getElementById("placeholder"); placeholder.setAttribute("src", source); if (!document.getElementById('description')) { return false;} var whictit = whichpic.getAttribute("title"); if(whictit){ var text = whictit; }else { var text = ""; } var description = document.getElementById('description'); if (description.firstChild.nodeType == 3) { description.firstChild.nodeValue = text; } return false; } function preparePlaceholder () { if (!document.createElement) { return false;} if (!document.createTextNode) {return false;} if (!document.getElementById) {return false;} if (!document.getElementById('imagegallery')) {return false;} var placeholder = document.createElement("img"); placeholder.setAttribute("id", "placeholder"); placeholder.setAttribute("src", "images/placeholder.gif"); placeholder.setAttribute("alt", "my image gallery"); var description = document.createElement("p"); description.setAttribute("id", "description"); var destxt = document.createTextNode("Choose an image"); description.appendChild(destxt); var gallery = document.getElementById('imagegallery'); insertAfter(description,gallery); insertAfter(placeholder,description); } function prepareGallery() { if (!document.getElementsByTagName) {return false;} if (!document.getElementById) {return false;} if (!document.getElementById('imagegallery')) {return false;} var gallery = document.getElementById('imagegallery'); var links = gallery.getElementsByTagName("a"); for (var i = 0; i < links.length; i++) { links[i].onclick = function () { return showPic(this); } } } //live function stripeTables () { if (!document.getElementsByTagName) { return false;} var tabs = document.getElementsByTagName('table'); for (var i = 0; i < tabs.length; i++) { var odd = false; var trs = tabs[i].getElementsByTagName("tr"); for (var j = 0; j < trs.length; j++) { if (odd == true) { addClass(trs[j],"odd"); odd = false; }else { odd =true; } } } } function highlightRows() { if (!document.getElementsByTagName) { return false;} var trs = document.getElementsByTagName('tr'); for (var i = 0; i < trs.length; i++) { trs[i].oldClassName = trs[i].className; trs[i].onmouseover = function () { addClass(this,'highlight') }; trs[i].onmouseout = function () { this.className = this.oldClassName; } } } function displayAbbreviations () { if (!document.getElementsByTagName || !document.createElement || !document.createTextNode) {return false;} var abbreviations = document.getElementsByTagName('abbr'); if (abbreviations.length < 1) { return false;} var defs = new Array(); for (var i = 0; i < abbreviations.length; i++) { var current_abbr = abbreviations[i]; if(current_abbr.lastChild.nodeValue.length < 1){ continue;} var definition = current_abbr.getAttribute("title"); var key = current_abbr.lastChild.nodeValue; defs[key] = definition; } var dlist = document.createElement("dl"); for (key in defs) { var definition = defs[key]; var dts = document.createElement('dt'); var dt_txt = document.createTextNode(key); dts.appendChild(dt_txt); var dds = document.createElement('dd'); var dd_txt = document.createTextNode(definition); dds.appendChild(dd_txt); dlist.appendChild(dts); dlist.appendChild(dds); } if (dlist.childNodes.length < 1) { return false;} var header = document.createElement("h3"); var header_text = document.createTextNode("Abbreviations"); header.appendChild(header_text); var article = document.getElementsByTagName('article'); if (article.length == 0) {return false;} var articleo= article[0]; articleo.appendChild(header); articleo.appendChild(dlist); } //contant function focusLabels () { if (!document.getElementsByTagName) { return false;} var labels = document.getElementsByTagName('label'); for (var i = 0; i < labels.length; i++) { if (!labels[i].getAttribute("for")) { continue;} labels[i].onclick = function() { var l_id = this.getAttribute("for"); if(!document.getElementById(l_id)){ return false;} var element = document.getElementById(l_id); element.focus(); } } } function resetFields (whichform) { //如果if返回true则结束当前函数 if (Modernizr.input.placeholder) return; for (var i = 0; i < whichform.elements.length; i++) { var element = whichform.elements[i]; if(element.type == "submit") continue; var check = element.placeholder || element.getAttribute("placeholder"); if(!check) continue; element.onfocus = function () { var text = this.placeholder || this.getAttribute("placeholder"); if (this.value == text) { this.value = ""; this.className = ""; } } element.onblur = function () { if (this.value == "") { this.value = this.placeholder || this.getAttribute("placeholder"); this.className = "placeholder"; } } element.onblur(); } } function validateForm(whichform) { for (var i = 0; i < whichform.elements.length; i++) { var element = whichform.elements[i]; if (element.getAttribute('required') == 'required') { if (!isFilled(element)) { alert("Please fill in the "+element.name+"field"); return false; } } if (element.getAttribute('type') == "email") { if (!isEmail(element)) { alert("The"+element.name+"field must be a valid email address."); return false; } } } return true; } // function isFilled (field) { // if (field.value.replace(' ','').length == 0) { return false;} // var placeholder = field.placeholder || field.getAttribute('placeholder'); // return (field.value != placeholder); // } // function isEmail (field) { // return (field.value.indexOf('@') != -1 || field.value.indexOf('.') != -1); // } function isFilled(field) { return (field.value.length > 1 && field.value != field.placeholder); } function isEmail(field) { return (field.value.indexOf("@") != -1 && field.value.indexOf(".") != -1); } function prepareForms () { for (var i = 0; i < document.forms.length; i++) { var thisform = document.forms[i]; resetFields(thisform); thisform.onsubmit = function () { if (!validateForm(this)) { return false; } var article = document.getElementsByTagName('article')[0]; if (submitFormWithAjax(this, article)) return false; return true; } } } //ajax function getHTTPObject () { if (typeof XMLHttpRequest == "undefined") XMLHttpRequest = function () { try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); } catch (e) {} try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); } catch (e) {} try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {} return false; } return new XMLHttpRequest(); } function displayAjaxLoading (element) { while (element.hasChildNodes()) { element.removeChild(element.lastChild); } var content = document.createElement('img'); content.setAttribute("src", "images/loading.gif"); content.setAttribute("alt", "Loading..."); element.appendChild(content); } function submitFormWithAjax (whichform,thetarget) { var request = getHTTPObject(); if (!request) { return false; } displayAjaxLoading(thetarget); var dataParts = []; var element; for (var i = 0; i < whichform.elements.length; i++) { element = whichform.elements[i]; dataParts[i] = element.name + '=' + encodeURIComponent(element.value); } var data = dataParts.join('&'); request.open('POST', whichform.getAttribute("action"), true); request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); request.onreadystatechange = function () { //验证当前文档的状态 if (request.readyState == 4) { //响应成功 if (request.status == 200 || request.status == 0) { //读取响应文本match()可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配 var matches = request.responseText.match(/<article>([\s\S]+)<\/article>/); if (matches.length > 0) { thetarget.innerHTML = matches[1]; } else { thetarget.innerHTML = '<p>Oops, there was an error. Sorry.</p>'; } } else { thetarget.innHTML = '<p> + request.statusText + </p>'; } } }; request.send(data); return true; } function loadEvents() { // home prepareSlideshow(); // about prepareInternalnav(); // photos preparePlaceholder(); prepareGallery(); //live stripeTables (); highlightRows(); displayAbbreviations(); //contact focusLabels (); prepareForms (); } // Load events addLoadEvent(highlightPage); addLoadEvent(loadEvents);
书中的综合案例,讲述了部分常用的函数