javascript 常用代碼大全(二)

來源:互聯網
上載者:User

 

// 6

一個可以在頁面上隨意畫線、多邊形、圓,填充等功能的js  (part 1) 
var jg_ihtm, jg_ie, jg_fast, jg_dom, jg_moz, 
jg_n4 = (document.layers && typeof document.classes != "undefined"); 

function chkDHTM(x, i) 

x = document.body || null; 
jg_ie = x && typeof x.insertAdjacentHTML != "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 && typeof x.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(this.cnv); 
x = x.createContextualFragment(jg_fast? this.htmRpc() : this.htm); 
this.cnv.appendChild(x); 
this.htm = ’’; 

function pntCnvIe() 

this.cnv.insertAdjacentHTML("BeforeEnd", jg_fast? this.htmRpc() : this.htm); 
this.htm = ’’; 

function pntCnvIhtm() 

this.cnv.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, 
’<div style="overflow:hidden;position:absolute;background-color:’+ 
’$1;left:$2;top:$3;width:$4;height:$5"></div>/n’); 

function htmPrtRpc() 

return this.htm.replace( 
regex, 
’<div style="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); 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.