⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 g.js

📁 YahooUI,搞WEB开发的朋友值得看一看
💻 JS
📖 第 1 页 / 共 2 页
字号:
/* This notice must be untouched at all times.
wz_jsgraphics.js    v. 2.3
The latest version is available at
http://www.walterzorn.com
or http://www.devira.com
or http://www.walterzorn.de
Copyright (c) 2002-2004 Walter Zorn. All rights reserved.
Created 3. 11. 2002 by Walter Zorn (Web: http://www.walterzorn.com )
Last modified: 15. 3. 2004
Performance optimizations for Internet Explorer
by Thomas Frank and John Holdsworth.
fillPolygon method implemented by Matthieu Haller.
High Performance JavaScript Graphics Library.
Provides methods
- to draw lines, rectangles, ellipses, polygons
  with specifiable line thickness,
- to fill rectangles and ellipses
- to draw text.
NOTE: Operations, functions and branching have rather been optimized
to efficiency and speed than to shortness of source code.
This program is free software;
you can redistribute it and/or modify it under the terms of the
GNU General Public License as published by the Free Software Foundation;
either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License
at http://www.gnu.org/copyleft/gpl.html for more details.
*/

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);
}

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)
    {
     pxw = w+1+(s&1);
     h = s;
    }
    else if (h-1)
    {
     pxw = s;
     h += 1+(s&1);
    }
    else pxw = h = s;
    this.mkOvQds(cx, cy, -x+1, ox-pxw+w+wod, -oy, -h+oy+hod, pxw, h);
    ox = x;
    oy = y;
   }
   else
   {
    tt -= aa*((y<<1)-3);
    st -= (aa<<1)*(--y);
   }
  }
  this.mkDiv(cx-a, cy-oy, s, (oy<<1)+hod);
  this.mkDiv(cx+a+wod-s+1, cy-oy, s, (oy<<1)+hod);
 }
 else
 {
  var _a = (width-((s-1)<<1))>>1,
  _b = (height-((s-1)<<1))>>1,
  _x = 0, _y = _b,
  _aa = (_a*_a)<<1, _bb = (_b*_b)<<1,
  _st = (_aa>>1)*(1-(_b<<1)) + _bb,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -