Javascript常用代码大全//打开模式对话框<body><script language=javascript>function doSelectUser(txtId){strFeatures="dialogWidth=500px;dialogHeight=360px;cente r=yes;middle=yes ;help=no;status=no;scroll=no";var url,strReturn;url="selUser.aspx";strReturn=window.showModalDialog(url,',strFeatures');}doSelectUser()</script></body>//返回模式对话框的值function okbtn_onclick() {var commstr='';window.returnValue=commstr;window.close() ;} okbtn_onclick()//全屏幕打开IE 窗口var winWidth=screen.availWidth ; var winHeight=screen.availHeight-20;window.open("main.aspx","surveyWindow","toolbar=no,wid th="+ winWidth +",height="+ winHeight+",top=0,left=0,scrollbars=yes,resizable=yes,center:yes,statu sbars=yes");//脚本中中使用xmlfunction initialize() {var xmlDocvar xslDocxmlDoc = new ActiveXObject('Microsoft.XMLDOM') xmlDoc.async = false;xslDoc = new ActiveXObject('Microsoft.XMLDOM') xslDoc.async = false;xmlDoc.load("tree.xml")xslDoc.load("tree.xsl")folderTree.innerHTML =xmlDoc.documentElement.transformNode(xslDoc)}一、验证类1、数字验证内1.1 整数1.2 大于0的整数(用于传来的ID的验证)1.3 负整数的验证1.4 整数不能大于iMax1.5 整数不能小于iMin2、时间类2.1 短时间,形如(13:04:06)2.2 短日期,形如(2003-12-05)2.3 长时间,形如(2003-12-05 13:04:06)2.4 只有年和月。
形如(2003-05,或者2003-5)2.5 只有小时和分钟,形如(12:03)3、表单类3.1 所有的表单的值都不能为空3.2 多行文本框的值不能为空。
3.3 多行文本框的值不能超过sMaxStrleng3.4 多行文本框的值不能少于sMixStrleng3.5 判断单选框是否选择。
3.6 判断复选框是否选择.3.7 复选框的全选,多选,全不选,反选3.8 文件上传过程中判断文件类型4、字符类4.1 判断字符全部由a-Z或者是A-Z的字字母组成4.2 判断字符由字母和数字组成。
4.3 判断字符由字母和数字,下划线,点号组成.且开头的只能是下划线和字母4.4 字符串替换函数.Replace();5、浏览器类5.1 判断浏览器的类型5.2 判断ie的版本5.3 判断客户端的分辨率6、结合类6.1 email的判断。
6.2 手机号码的验证6.3 身份证的验证二、功能类1、时间与相关控件类1.1 日历1.2 时间控件1.3 万年历1.4 显示动态显示时钟效果(文本,如OA中时间)1.5 显示动态显示时钟效果(图像,像手表)2、表单类2.1 自动生成表单2.2 动态添加,修改,删除下拉框中的元素2.3 可以输入内容的下拉框2.4 多行文本框中只能输入iMax文字。
如果多输入了,自动减少到iMax个文字(多用于短信发送)3、打印类3.1 打印控件4、事件类4.1 屏蔽右键4.2 屏蔽所有功能键4.3 --> 和<-- F5 F11,F9,F14.4 屏蔽组合键ctrl+N5、网页设计类5.1 连续滚动的文字,图片(注意是连续的,两段文字和图片中没有空白出现)5.2 html编辑控件类5.3 颜色选取框控件5.4 下拉菜单5.5 两层或多层次的下拉菜单5.6 仿IE菜单的按钮。
(效果如的导航栏目)5.7 状态栏,title栏的动态效果(例子很多,可以研究一下)5.8 双击后,网页自动滚屏6、树型结构。
6.1 asp+SQL版6.2 asp+xml+sql版6.3 java+sql或者java+sql+xml7、无边框效果的制作8、连动下拉框技术9、文本排序10,画图类,含饼、柱、矢量贝滋曲线11,操纵客户端注册表类12,DIV层相关(拖拽、显示、隐藏、移动、增加)13,TABLAE相关(客户端动态增加行列,模拟进度条,滚动列表等) 14,各种<object classid=>相关类,如播放器,flash与脚本互动等16, 刷新/模拟无刷新异步调用类(XMLHttp或iframe,frame一、验证类1、数字验证内1.1 整数/^(-|\+)?\d+$/.test(str)1.2 大于0的整数(用于传来的ID的验证)/^\d+$/.test(str)1.3 负整数的验证/^-\d+$/.test(str)2、时间类2.1 短时间,形如(13:04:06)function isTime(str) {var a = str.match(/^(\d{1,2})(:)?(\d{1,2})\2(\d{1,2})$/); if (a == null) {alert('输入的参数不是时间格式');return false;}if (a[1]>24 || a[3]>60 || a[4]>60) {alert("时间格式不对");return false; }return true; }document.write (isTime('15:04:06'))返回值:true2.2 短日期,形如(2003-12-05)function strDateTime(str) {var r = str.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);if(r==null)return false;var d= new Date(r[1], r[3]-1, r[4]);return(d.getFullYear()==r[1]&&(d.getMonth()+1)==r[3]&&d.getD ate()==r[4]); }document.write (strDateTime("2003-12-05"))返回值:true2.3 长时间,形如(2003-12-05 13:04:06)function strDateTime(str) {var reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})(\d{1,2}):(\d{1,2}):(\d{1,2})$/;var r = str.match(reg);if(r==null)return false;var d= new Date(r[1], r[3]-1,r[4],r[5],r[6],r[7]);return(d.getFullYear()==r[1]&&(d.getMonth()+1)==r[3]&&d.getD ate()==r[4]&&d.getHours()==r[5]&&d.getMinutes()==r[6]& &d.getSeconds()==r[7]);}document.write (strDateTime("2003-12-05 13:04:06"))返回值:true2.4 只有年和月。
形如(2003-05,或者2003-5)2.5 只有小时和分钟,形如(12:03)3、表单类3.1 所有的表单的值都不能为空<input onblur="if(this.value.replace(/^ +| +$/g,')==')alert('不能为空!')">3.2 多行文本框的值不能为空。
3.3 多行文本框的值不能超过sMaxStrleng3.4 多行文本框的值不能少于sMixStrleng3.5 判断单选框是否选择。
3.6 判断复选框是否选择.3.7 复选框的全选,多选,全不选,反选3.8 文件上传过程中判断文件类型4、字符类4.1 判断字符全部由a-Z或者是A-Z的字字母组成<input onblur="if(/[^a-zA-Z]/g.test(this.value))alert('有错')">4.2 判断字符由字母和数字组成。
<input onblur="if(/[^0-9a-zA-Z]/g.test(this.value))alert('有错')">4.3 判断字符由字母和数字,下划线,点号组成.且开头的只能是下划线和字母/^([a-zA-z_]{1})([\w]*)$/g.test(str)4.4 字符串替换函数.Replace();5、浏览器类5.1 判断浏览器的类型window.navigator.appName5.2 判断ie的版本window.navigator.appVersion5.3 判断客户端的分辨率window.screen.height; window.screen.width;6、结合类6.1 email的判断。
function ismail(mail) {return(newRegExp(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z 0-9]+)*\.[A-Za-z0-9]+$/).test(mail)); }6.2 手机号码的验证6.3 身份证的验证function isIdCardNo(num) {if (isNaN(num)) {alert("输入的不是数字!"); return false;} var len = num.length, re;if (len == 15)re = newRegExp(/^(\d{6})()?(\d{2})(\d{2})(\d{2})(\d{3})$/);else if (len == 18)re = newRegExp(/^(\d{6})()?(\d{4})(\d{2})(\d{2})(\d{3})(\d)$/);else {alert("输入的数字位数不对!"); return false;}var a = num.match(re);if (a != null) {if (len==15) {var D = new Date("19"+a[3]+"/"+a[4]+"/"+a[5]);var B =D.getYear()==a[3]&&(D.getMonth()+1)==a[4]&&D.getDate ()==a[5]; }else{var D = new Date(a[3]+"/"+a[4]+"/"+a[5]);var B =D.getFullYear()==a[3]&&(D.getMonth()+1)==a[4]&&D.get Date()==a[5]; }if (!B) {alert("输入的身份证号"+ a[0] +" 里出生日期不对!"); return false;}}return true; }document.write (isIdCardNo("110108************"))返回值:true画图(一个矩形框):<OBJECTid=Sstyle="LEFT: 0px; WIDTH: 392px; TOP: 0px; HEIGHT: 240px"height=240width=392classid="clsid:369303C2-D7AC-11D0-89D5-00A0C90833E 6"></OBJECT><SCRIPT> S.DrawingSurface.ArcDegrees(0,0,0,30,50,60);S.DrawingSurface.ArcRadians(30,0,0,30,50,60);S.DrawingSurface.Line(10,10,100,100);</SCRIPT>写注册表:<SCRIPT>var WshShell = WScript.CreateObject("WScript.Shell"); WshShell.RegWrite ("HKCU\oftware\\ACME\\FortuneTeller\\", 1, "REG_BINARY"); WshShell.RegWrite ("HKCU\oftware\\ACME\\FortuneTeller\\MindReader", "Goocher!", "REG_SZ");var bKey = WshShell.RegRead ("HKCU\oftware\\ACME\\FortuneTeller\\");WScript.Echo (WshShell.RegRead ("HKCU\oftware\\ACME\\FortuneTeller\\MindReader")); WshShell.RegDelete ("HKCU\oftware\\ACME\\FortuneTeller\\MindReader"); WshShell.RegDelete ("HKCU\oftware\\ACME\\FortuneTeller\\");WshShell.RegDelete ("HKCU\ oftware\\ACME\\");</SCRIPT>TABLAE相关(客户端动态增加行列)<HTML><SCRIPT LANGUAGE="JScript">function numberCells() {var count=0;for (i=0; i < document.all.mytable.rows.length; i++) {for (j=0; j < document.all.mytable.rows(i).cells.length; j++) { document.all.mytable.rows(i).cells(j).innerText = count; count++; } } }</SCRIPT><BODY onload="numberCells()"><TABLE id=mytable border=1><TR><TH> </TH><TH> </TH><TH> </TH><TH> </TH></TR><TR><TD> </TD><TD> </TD><TD> </TD><TD> </TD></TR><TR><TD> </TD><TD> </TD><TD> </TD><TD> </TD></TR></TABLE></BODY></HTML>1.身份证严格验证:<script>var aCity={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"}function cidInfo(sId){var iSum=0var info=""if(!/^\d{17}(\d|x)$/i.test(sId))return false;sId=sId.replace(/x$/i,"a");if(aCity[parseInt(sId.substr(0,2))]==null)return "Error:非法地区";sBirthday=sId.substr(6,4)+"-"+Number(sId.substr(10,2))+"-" +Number(sId.substr(12,2));var d=new Date(sBirthday.replace(/-/g,"/"))if(sBirthday!=(d.getFullYear()+"-"+ (d.getMonth()+1) + "-" + d.getDate()))return "Error:非法生日";for(var i = 17;i>=0;i --) iSum += (Math.pow(2,i) % 11) * parseInt(sId.charAt(17 - i),11)if(iSum%11!=1)return "Error:非法证号";returnaCity[parseInt(sId.substr(0,2))]+","+sBirthday+","+(sId.subs tr(16,1)%2?"男":"女") }document.write(cidInfo("380524198002300016"),"<br/>"); document.write(cidInfo("340524************"),"<br/>") document.write(cidInfo("340524************"),"<br/>") document.write(cidInfo("340524************"),"<br/>"); </script>2.验证IP地址<SCRIPT LANGUAGE="JavaScript">function isip(s){var check=function(v){try{return (v<=255 &&v>=0)}catch(x){return false}};var re=s.split(".")return (re.length==4)?(check(re[0]) && check(re[1]) && check(re[2]) && check(re[3])):false }var s="202.197.78.129";alert(isip(s))</SCRIPT>3.加sp1后还能用的无边框窗口!!<HTML XMLNS:IE><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><IE:Download ID="include"STYLE="behavior:url(#default#download)" /><title>Chromeless Window</title><SCRIPT LANGUAGE="JScript">/*--- Special Thanks For andot ---*//* This following code are designed and writen by Windy_sk<***************>You can use it freely, but u must held all the copyright items! *//*--- Thanks For andot Again ---*/var CW_width= 400;var CW_height= 300;var CW_top= 100;var CW_left= 100;var CW_url= "/";var New_CW= window.createPopup();var CW_Body= New_CW.document.body;var content= "";var CSStext= "margin:1px;color:black; border:2px outset;border-style:expression(onmouseout=onmouseup=fun ction(){this.style.borderStyle='outset'},onmousedown=function(){if(event.button!=2)this.style.borde rStyle='inset'});background-color:buttonface;width:16px;hei ght:14px;font-size:12px;line-height:11px;cursor:Default;"; //Build Windowinclude.startDownload(CW_url,function(source){content=source});function insert_content(){var temp = "";CW_Body.style.overflow= "hidden";CW_Body.style.backgroundColor= "white";CW_Body.style.border= "solid black 1px";content = content.replace(/<a ([^>]*)>/g,"<aonclick='parent.open(this.href);return false' $1>");temp += "<table width=100% height=100% cellpadding=0 cellspacing=0 border=0>";temp += "<trstyle=';font-size:12px;background:#0099CC;height:20;cursor :default'ondblclick=\"Max.innerText=Max.innerText=='1'?'2':'1';pare nt.if_max=!parent.if_max;parent.show_CW();\" onmouseup='parent.drag_up(event)'onmousemove='parent.drag_move(event)' onmousedown='parent.drag_down(event)'onselectstart='return false' oncontextmenu='return false'>"; temp += "<tdstyle='color:#ffffff;padding-left:5px'>Chromeless Window For IE6 SP1</td>";temp += "<td style='color:#ffffff;padding-right:5px;'align=right>";temp += "<span id=Help onclick=\"alert('Chromeless Window For IE6 SP1 - Ver 1.0\\n\\nCode ByWindy_sk\\n\\nSpecial Thanks For andot')\"style=\""+CSStext+"font-family:System;padding-right:2px;\">?</span>";temp += "<spanid=Min onclick='parent.New_CW.hide();parent.blur()' style=\""+CSStext+"font-family:Webdings;\"title='Minimum'>0</span>";temp += "<spanid=Max onclick=\"this.innerText=this.innerText=='1'?'2':'1' ;parent.if_max=!parent.if_max;parent.show_CW();\"style=\""+CSStext+"font-family:Webdings;\"title='Maximum'>1</span>";temp += "<span id=Closeonclick='parent.opener=null;parent.close()'style=\""+CSStext+"font-family:System;padding-right:2px;\" title='Close'>x</span>";temp += "</td></tr><tr><td colspan=2>";temp += "<div id=includestyle='overflow:scroll;overflow-x:hidden;overflow-y:auto; HEIGHT: 100%; width:"+CW_width+"'>";temp += content;temp += "</div>";temp += "</td></tr></table>";CW_Body.innerHTML = temp; }setTimeout("insert_content()",1000);var if_max = true;function show_CW(){window.moveTo(10000, 10000);if(if_max){New_CW.show(CW_top, CW_left, CW_width, CW_height); if(typeof(New_CW.document.all.include)!="undefined"){ New_CW.document.all.include.style.width = CW_width; New_CW.document.all.Max.innerText = "1"; }}else{New_CW.show(0, 0, screen.width, screen.height);New_CW.document.all.include.style.width = screen.width; } }window.onfocus = show_CW;window.onresize = show_CW;// Move Windowvar drag_x,drag_y,draging=falsefunction drag_move(e){if (draging){New_CW.show(e.screenX-drag_x, e.screenY-drag_y,CW_width, CW_height);return false; } }function drag_down(e){if(e.button==2)return;if(New_CW.document.body.offsetWidth==screen.width && New_CW.document.body.offsetHeight==screen.height) retur n;drag_x=e.clientX;drag_y=e.clientY;draging=true;e.srcElement.setCapture(); }function drag_up(e){draging=false;e.srcElement.releaseCapture();if(New_CW.document.body.offsetWidth==screen.width && New_CW.document.body.offsetHeight==screen.height) return;CW_top = e.screenX-drag_x;CW_left = e.screenY-drag_y; }</SCRIPT></HTML>贴两个关于treeview的<script language="javascript"><!--//初始化选中节点function initchecknode() {var node=TreeView1.getTreeNode("1");node.setAttribute("Checked","true");setcheck(node,"true");FindCheckedFromNode(TreeView1); }//oncheck事件function tree_oncheck(tree) {var node=tree.getTreeNode(tree.clickedNodeIndex);varPchecked=tree.getTreeNode(tree.clickedNodeIndex).getAttri bute("checked");setcheck(node,Pchecked);document.all.checked.value="";document.all.unchecked.value="";FindCheckedFromNode(TreeView1); }//设置子节点选中function setcheck(node,Pc) {var i;var ChildNode=new Array();ChildNode=node.getChildren();if(parseInt(ChildNode.length)==0)return;else {for(i=0;i<ChildNode.length;i++) {var cNode;cNode=ChildNode[i];if(parseInt(cNode.getChildren().length)!=0)setcheck(cNode,Pc);cNode.setAttribute("Checked",Pc); } } }//获取所有节点状态function FindCheckedFromNode(node) {var i = 0;var nodes = new Array();nodes = node.getChildren();for (i = 0; i < nodes.length; i++) {var cNode;cNode=nodes[i];if (cNode.getAttribute("Checked"))AddChecked(cNode);elseAddUnChecked(cNode);if (parseInt(cNode.getChildren().length) != 0 ) { FindCheckedFromNode(cNode);} } }//添加选中节点function AddChecked(node) {document.all.checked.value +=node.getAttribute("NodeData");document.all.checked.value += ','; }//添加未选中节点function AddUnChecked(node) {document.all.unchecked.value +=node.getAttribute("NodeData");document.all.unchecked.value += ','; }//--> </script>treeview中如何在服务器端得到客户端设置后的节点选中状态<script language="C#" runat="server">private void Button1_Click(object sender,System.EventArgs e) {Response.Write(TreeView1.Nodes[0].Checked); }</script><script language="javascript">function set_check() {var nodeindex = "0";var node=TreeView1.getTreeNode(nodeindex);node.setAttribute("Checked","True");TreeView1.queueEvent('oncheck', nodeindex); }</script>三個實用的小技巧:關閉輸入法.禁止貼上.禁止複製關閉輸入法本文字框輸入法被關閉:語法:style="ime-mode:disabled"範例:<input type="text" name="textfield"style="ime-mode:disabled">禁止貼上本文字框禁止貼上文字:語法:onpaste="return false"範例:<input type="text" name="textfield" onpaste="return false">禁止複製本文字框禁止複製:語法:oncopy="return false;" oncut="return false;"範例:<input name="textfield" type="text" value="不能複製裡面的字" oncopy="return false;" oncut="return false;">//================================//Cookie操作//================================function getCookieVal (offset) {var endstr = document.cookie.indexOf (";", offset);if (endstr == -1)endstr = document.cookie.length;return unescape(document.cookie.substring(offset, endstr)); }function GetCookie (name) {var arg = name + "=";var alen = arg.length;var clen = document.cookie.length;var i = 0;while (i < clen) {var j = i + alen;if (document.cookie.substring(i, j) == arg)return getCookieVal (j);i = document.cookie.indexOf(" ", i) + 1;if (i == 0)break; }return null; }function deleteCookie(cname) {var expdate = new Date();expdate.setTime(expdate.getTime() - (24 * 60 * 60 * 1000 * 369));// document.cookie =" ckValue="ok"; expires="+ expdate.toGMTString();setCookie(cname,"",expdate); }function setCookie (name, value, expires) {document.cookie = name + "=" + escape(value) +"; expires=" + expires.toGMTString() ; }// 一个可以在页面上随意画线、多边形、圆,填充等功能的js (part 1)var jg_ihtm, jg_ie, jg_fast, jg_dom, jg_moz,jg_n4 = (yers && typeof document.classes != "undefined");function chkDHTM(x, i) {x = document.body || null;jg_ie = x && typeof x.insertAdjacent HTML != "undefined";jg_dom = (x && !jg_ie &&typeof x.appendChild != "undefined" &&typeof document.createRange != "undefined" &&typeof (i = document.createRange()).setStartBefore != "undefined" &&typeof i.createContextualFragment != "undefined");jg_ihtm = !jg_ie && !jg_dom && x && typeofx.innerHTML != "undefined";jg_fast = jg_ie && document.all && !window.opera;jg_moz = jg_dom && typeof x.style.MozOpacity != "undefined"; }function pntDoc() {this.wnd.document.write(jg_fast? this.htmRpc() : this.htm); this.htm = '; }function pntCnvDom() {var x = document.createRange();x.setStartBefore(v);x = x.createContextualFragment(jg_fast? this.htmRpc() : this.htm);v.appendChild(x);this.htm = '; }function pntCnvIe() {v.insertAdjacentHTML("BeforeEnd", jg_fast? this.htmRpc() : this.htm);this.htm = '; }function pntCnvIhtm() {v.innerHTML += this.htm;this.htm = '; }function pntCnv() {this.htm = '; }function mkDiv(x, y, w, h) {this.htm += '<div style="position:absolute;'+'left:' + x + 'px;'+'top:' + y + 'px;'+'width:' + w + 'px;'+'height:' + h + 'px;'+'clip:rect(0,'+w+'px,'+h+'px,0);'+'background-color:' + this.color +(!jg_moz? ';overflow:hidden' : ')+';"><\/div>'; }function mkDivIe(x, y, w, h) {this.htm += '%%'+this.color+';'+x+';'+y+';'+w+';'+h+';';}function mkDivPrt(x, y, w, h) {this.htm += '<div style="position:absolute;'+'border-left:' + w + 'px solid ' + this.color + ';'+'left:' + x + 'px;'+'top:' + y + 'px;'+ 'width:0px;'+'height:' + h + 'px;'+'clip:rect(0,'+w+'px,'+h+'px,0);'+'background-color:' + this.color +(!jg_moz? ';overflow:hidden' : ')+';"><\/div>'; }function mkLyr(x, y, w, h) {this.htm += '<layer '+'left="' + x + '" '+'top="' + y + '" '+'width="' + w + '" '+'height="' + h + '" '+'bgcolor="' + this.color + '"><\/layer>\n'; }var regex = /%%([^;]+);([^;]+);([^;]+);([^;]+);([^;]+);/g; function htmRpc() {return this.htm.replace(regex,'<divstyle="overflow:hidden;position:absolute;background-color:' + '$1;left:$2;top:$3;width:$4;height:$5"></div>\n'); } function htmPrtRpc() {return this.htm.replace(regex,'<divstyle="overflow:hidden;position:absolute;background-color:' + '$1;left:$2;top:$3;width:$4;height:$5;border-left:$4px solid $1"></div>\n'); }function mkLin(x1, y1, x2, y2) {if (x1 > x2) {var _x2 = x2;var _y2 = y2;x2 = x1;y2 = y1;x1 = _x2;y1 = _y2; }var dx = x2-x1, dy = Math.abs(y2-y1),x = x1, y = y1,yIncr = (y1 > y2)? -1 : 1;if (dx >= dy) {var pr = dy<<1,pru = pr - (dx<<1),p = pr-dx,ox = x;while ((dx--) > 0) {++x;if (p > 0) {this.mkDiv(ox, y, x-ox, 1);y += yIncr;p += pru;ox = x; }else p += pr; }this.mkDiv(ox, y, x2-ox+1, 1); }else {var pr = dx<<1,pru = pr - (dy<<1),p = pr-dy,oy = y;if (y2 <= y1) {while ((dy--) > 0) {if (p > 0) {this.mkDiv(x++, y, 1, oy-y+1);y += yIncr;p += pru;oy = y; }else {y += yIncr;p += pr; } }this.mkDiv(x2, y2, 1, oy-y2+1); }else {while ((dy--) > 0) {y += yIncr;if (p > 0) {this.mkDiv(x++, oy, 1, y-oy);p += pru;oy = y;}else p += pr; }this.mkDiv(x2, oy, 1, y2-oy+1); } } }function mkLin2D(x1, y1, x2, y2) {if (x1 > x2) {var _x2 = x2;var _y2 = y2;x2 = x1;y2 = y1;x1 = _x2;y1 = _y2; }var dx = x2-x1, dy = Math.abs(y2-y1),x = x1, y = y1,yIncr = (y1 > y2)? -1 : 1;var s = this.stroke;if (dx >= dy) {if (s-3 > 0) {var _s = (s*dx*Math.sqrt(1+dy*dy/(dx*dx))-dx-(s>>1)*dy) / dx;_s = (!(s-4)? Math.ceil(_s) : Math.round(_s)) + 1; }else var _s = s; var ad = Math.ceil(s/2);var pr = dy<<1,pru = pr - (dx<<1),p = pr-dx,ox = x;while ((dx--) > 0) {++x;if (p > 0) {this.mkDiv(ox, y, x-ox+ad, _s);y += yIncr;p += pru;ox = x; }else p += pr; }this.mkDiv(ox, y, x2-ox+ad+1, _s); }else {if (s-3 > 0) {var _s = (s*dy*Math.sqrt(1+dx*dx/(dy*dy))-(s>>1)*dx-dy) / dy;_s = (!(s-4)? Math.ceil(_s) : Math.round(_s)) + 1; }else var _s = s;var ad = Math.round(s/2);var pr = dx<<1,pru = pr - (dy<<1),p = pr-dy,oy = y;if (y2 <= y1) {++ad;while ((dy--) > 0) {if (p > 0) {this.mkDiv(x++, y, _s, oy-y+ad);y += yIncr;p += pru;oy = y; }else {y += yIncr;p += pr; } }this.mkDiv(x2, y2, _s, oy-y2+ad); }else {while ((dy--) > 0) {y += yIncr;if (p > 0) {this.mkDiv(x++, oy, _s, y-oy+ad);p += pru;oy = y; }else p += pr; }this.mkDiv(x2, oy, _s, y2-oy+ad+1); } } }function mkLinDott(x1, y1, x2, y2) {if (x1 > x2) {var _x2 = x2;var _y2 = y2;x2 = x1;y2 = y1;x1 = _x2;y1 = _y2; }var dx = x2-x1, dy = Math.abs(y2-y1), x = x1, y = y1,yIncr = (y1 > y2)? -1 : 1,drw = true;if (dx >= dy) {var pr = dy<<1,pru = pr - (dx<<1),p = pr-dx;while ((dx--) > 0) {if (drw) this.mkDiv(x, y, 1, 1);drw = !drw;if (p > 0) {y += yIncr;p += pru; }else p += pr;++x; }if (drw) this.mkDiv(x, y, 1, 1); }else {var pr = dx<<1,pru = pr - (dy<<1),p = pr-dy;while ((dy--) > 0) {if (drw) this.mkDiv(x, y, 1, 1);drw = !drw;y += yIncr;if (p > 0) {++x;p += pru; }else p += pr; }if (drw) this.mkDiv(x, y, 1, 1); } } function mkOv(left, top, width, height) { var a = width>>1, b = height>>1,wod = width&1, hod = (height&1)+1, cx = left+a, cy = top+b,x = 0, y = b,ox = 0, oy = b,aa = (a*a)<<1, bb = (b*b)<<1,st = (aa>>1)*(1-(b<<1)) + bb,tt = (bb>>1) - aa*((b<<1)-1),w, h;while (y > 0) {if (st < 0) { st += bb*((x<<1)+3);tt += (bb<<1)*(++x); }else if (tt < 0){st += bb*((x<<1)+3) - (aa<<1)*(y-1);tt += (bb<<1)*(++x) - aa*(((y--)<<1)-3);w = x-ox;h = oy-y;if (w&2 && h&2) {this.mkOvQds(cx, cy, -x+2, ox+wod, -oy, oy-1+hod, 1, 1); this.mkOvQds(cx, cy, -x+1, x-1+wod, -y-1, y+hod, 1, 1);}else this.mkOvQds(cx, cy, -x+1, ox+wod, -oy, oy-h+hod, w, h);ox = x;oy = y; }else {tt -= aa*((y<<1)-3);st -= (aa<<1)*(--y); } }this.mkDiv(cx-a, cy-oy, a-ox+1, (oy<<1)+hod);this.mkDiv(cx+ox+wod, cy-oy, a-ox+1, (oy<<1)+hod);}一个可以在页面上随意画线、多边形、圆,填充等功能的js (part 2)function mkOv2D(left, top, width, height) {var s = this.stroke;width += s-1;height += s-1;var a = width>>1, b = height>>1,wod = width&1, hod = (height&1)+1,cx = left+a, cy = top+b,x = 0, y = b,aa = (a*a)<<1, bb = (b*b)<<1,st = (aa>>1)*(1-(b<<1)) + bb,tt = (bb>>1) - aa*((b<<1)-1);if (s-4 < 0 && (!(s-2) || width-51 > 0 && height-51 > 0)) { var ox = 0, oy = b,w, h,pxl, pxr, pxt, pxb, pxw;while (y > 0) {if (st < 0) {st += bb*((x<<1)+3);tt += (bb<<1)*(++x); }else if (tt < 0) {st += bb*((x<<1)+3) - (aa<<1)*(y-1);tt += (bb<<1)*(++x) - aa*(((y--)<<1)-3);w = x-ox;h = oy-y;if (w-1) {。