2005年07月19日

初探 HTML 组件 – 创建一个 HTC



作者:Weber 出处:HTMLCN

创建一个 HTC



下面通过创建一个鼠标滑过加亮显示的 HTC 来演示一下创建 HTC 的过程。 1、创建 HTC 文件的架构。一个标准的 HTC 文件含有一个 SCRIPT 块和一对可选的 COMPONENT 标记。



<PUBLIC:COMPONENT>

        <SCRIPT>

        </SCRIPT>

</PUBLIC:COMPONENT>



2、写一个可执行的脚本。

在下面的代码中,ATTACH 被用于设置 HTC 接收元素在 onmouseover 和 onmouseout 事件被触发的消息。它通知 HTC 通过切换颜色来体现鼠标滑过元素时的加亮效果。

<PUBLIC:COMPONENT>

<PUBLIC:ATTACH EVENT=\"onmouseover\" ONEVENT=\"Hilite()\" />

<PUBLIC:ATTACH EVENT=\"onmouseout\"  ONEVENT=\"Restore()\" />

<SCRIPT LANGUAGE=\"JScript\">

   var normalColor, normalSpacing;



   function Hilite()

   {

     // save original values

     normalColor  = runtimeStyle.color;  

     normalSpacing= runtimeStyle.letterSpacing;



     runtimeStyle.color  = \"red\";

     runtimeStyle.letterSpacing = 2;

   }



   function Restore()

   {

     // restore original values

     runtimeStyle.color  = normalColor;

     runtimeStyle.letterSpacing = normalSpacing;

   }

</SCRIPT>

</PUBLIC:COMPONENT>



注意:您可以直接使用属性、方法或者是事件的名称来访问它们,并不需要在前面加上 element 的前缀。在前面的例子中我们注意到在切换颜色时我们直接调用了 runtimeStyle ,而不是使用 element.runtimeStyle。



3、一旦执行,这个 HTC 就能在网页中应用来达到鼠标滑过加亮的效果。



<HEAD>

<STYLE>

   LI {behavior:url(hilite.htc)}

</STYLE>

</HEAD>



<P>Mouse over the two list items below to see this effect.

<UL>

  <LI>HTML Authoring</LI>

  <LI>Dynamic HTML</LI>

</UL>


初探 HTML 组件 – 定义方法



作者:Weber 出处:HTMLCN
 定义方法



我们可以使用 PUBLIC:METHOD 元素来定义 HTC 的方法集,如下例所示:



<PUBLIC:METHOD NAME="startFlying" />



当我们定义了一个方法后,我们就可以在 HTC 中直接来调用它。请看下面的例子:



<PUBLIC:METHOD NAME="tick" />

<PUBLIC:METHOD NAME="startFlying" />

:

<SCRIPT LANGUAGE="JScript">

var currCount;

var flyCount;

var flying;

var msecs;



var oTop, oLeft;

msecs = 50;

flyCount = 20;

flying = false;



runtimeStyle.position = "relative";

runtimeStyle.visibility = "hidden";



window.attachEvent("onload", onload);



function onload()

{

// delay commences from the window.onLoad event

  if (delay != "none")

  {

     window.setTimeout(uniqueID+".tick()", delay);

  }

}



function tick()

{

   if (flying == false)

   {

      startFlying();

   }

   else

   {

      doFly();

   }

}



function startFlying()

{

  if (fromX==null && fromY==null)

  {

     if (from=="top")

     {

       runtimeStyle.posTop = -offsetTop-offsetHeight;

     }

     else if (from=="bottom")

     {

       runtimeStyle.posTop = element.document.body.clientHeight;

     }

     else if (from=="right" )

     {

       runtimeStyle.posLeft = element.document.body.clientWidth;

     }

     else

     {

       runtimeStyle.posLeft = -offsetLeft-offsetWidth;

     }   

  }

  else

  {

     runtimeStyle.posTop = fromY;

     runtimeStyle.posLeft = fromX;

  }

  

  runtimeStyle.visibility = "visible";

  flying = true;

  

  oTop = runtimeStyle.posTop;

  oLeft = runtimeStyle.posLeft;

  

  currCount = 0;

  doFly();

}



function doFly()

{

  var dt, dl;

  

  currCount++;

  dt = oTop / flyCount;

  dl = oLeft / flyCount;

  

  runtimeStyle.posTop -= dt;

  runtimeStyle.posLeft -= dl;



  if (currCount < flyCount)

  {

      window.setTimeout(uniqueID+".tick();", msecs);

  }

  else

  {

      runtimeStyle.posTop = 0;

      runtimeStyle.posLeft = 0;

      flying = false;

      evObj = createEventObject();

      evObj.setAttribute("resulty", uniqueID);       

      finished.fire(evObj);

  }

}

</SCRIPT>


初探 HTML 组件 – 定义事件



作者:Weber 出处:HTMLCN

<p><b>定义事件</b>

<p>要在 HTC 中定义一个事件,我们需要用到 PUBLIC:EVENT 元素。当我们定义了一个事件后,我们就可以在 HTC 的所在页中来调用它。

<p>在下面的例子中来示范如何实现一个计算器的功能。在 HTC 中我们使用 EVENT 元素定义了一个 onResultChange 事件。当在所在页中激活 onResultChange 事件时,HTC 将计算出结果并返回到所在页。

<xmp>

<PUBLIC:EVENT NAME=onResultChange ID=rcID />

<SCRIPT LANGUAGE="JScript">

:

oEvent = createEventObject();

oEvent.result = sResult;

rcID.fire (oEvent);

:

</SCRIPT>

</xmp>

<p>下面是含有这个 HTC 的页面:

<xmp>

<HTML XMLNS:InetSDK>

<HEAD>

<TITLE>Calculator Sample</TITLE>



<STYLE>

INPUT {font-family: Courier New}

@media all {

InetSDK:CALC {behavior:url(Engine.htc)}

}

</STYLE>



<LINK REL="stylesheet" HREF="/workshop/basicSDKIE4.css" TYPE="text/css">

</HEAD>



<BODY BGCOLOR="<BLOCKQUOTE CLASS="body">



<P>

<InetSDK:CALC id="myCalc" onResultChange="resultWindow.innerText =window.event.result">

<TABLE>

<TR>

<TD COLSPAN=5>

<DIV ID="resultWindow" STYLE="padding:5; background-color:buttonface" ALIGN="RIGHT">0.</DIV>

</TD>

</TR>

<TR>

<TD><INPUT TYPE=BUTTON VALUE=" 7 "></TD>

<TD><INPUT TYPE=BUTTON VALUE=" 8 "></TD>

<TD><INPUT TYPE=BUTTON VALUE=" 9 "></TD>

<TD><INPUT TYPE=BUTTON VALUE=" / "></TD>

<TD><INPUT TYPE=BUTTON VALUE=" C "></TD>

</TR>

<TR>

<TD><INPUT TYPE=BUTTON VALUE=" 4 "></TD>

<TD><INPUT TYPE=BUTTON VALUE=" 5 "></TD>

<TD><INPUT TYPE=BUTTON VALUE=" 6 "></TD>

<TD><INPUT TYPE=BUTTON VALUE=" * "></TD>

<TD><INPUT TYPE=BUTTON VALUE=" % " DISABLED></TD>

</TR>

<TR>

<TD><INPUT TYPE=BUTTON VALUE=" 1 "></TD>

<TD><INPUT TYPE=BUTTON VALUE=" 2 "></TD>

<TD><INPUT TYPE=BUTTON VALUE=" 3 "></TD>

<TD><INPUT TYPE=BUTTON VALUE=" – "></TD>

<TD><INPUT TYPE=BUTTON VALUE="1/x" DISABLED></TD>

</TR>



<TR>

<TD><INPUT TYPE=BUTTON VALUE=" 0 "></TD>

<TD><INPUT TYPE=BUTTON VALUE="+/-"></TD>

<TD><INPUT TYPE=BUTTON VALUE=" . "></TD>

<TD><INPUT TYPE=BUTTON VALUE=" + "></TD>

<TD><INPUT TYPE=BUTTON VALUE=" = "></TD>

</TR>

</TABLE>

</InetSDK:CALC>

</BLOCKQUOTE>

</BODY>

</HTML>

</xmp>

<p>注意:本文的所有例子都需要在 IE5 以上版本的浏览器中才能看到应有的效果。


2005年07月18日

    邮寄手机的事总是忘!

    还有挂失招行卡,我已经搞丢2张卡了~

    今天晚上有空就看看下面这篇文章,htc当初就没太高明白。
怎么写HTC文件呢?请给点资料!谢谢
http://51js.com/viewthread.php?tid=1672

    应该看看美剧了,每天坚持看一点,不带字幕或者装上英文字幕来看。
虽然会很累,但是如果不这样最近实在就没有什么进步了~

    还得洗衣裤,洗床单!

2005年07月14日

        昨天我的Wow中的升骑士终于升到40级了,可以召唤军马了!!

       两年前的今天我第一天上班~

2005年07月12日

我在17173中发现的这个天赋模拟器,最初可能是发布于Sina

现象:不能显示出来职业
原因:
   
initLoad() 中 先执行了函数 loadTalents()函数而后执行了talents_main()函数。

    loadTalents()函数中调用了showClassList()函数,showClassList()函数又调用了setInnerHTML()setInnerHTML()用到了涉及浏览器类型的全局变量mozilla,但是mozilla这个变量确是在talents_main()中初始化的,当装载职业的时候mozilla这个变量还没有正确初始化,导致在Firefox浏览器中
function setInnerHTML(object,
html)
{
 if(mozilla)
 {
  var r =
object.ownerDocument.createRange();
  r.selectNodeContents(object);
  r.deleteContents();
  var
df =
r.createContextualFragment(html);
  object.appendChild(df);
 }
 else
if(navigator.appName == "Microsoft Internet
Explorer")
 {
  object.innerHTML = html;
 }

}
上面这段函数在装载职业的时候没有被正确执行!

修改方法:
   
把初始化mozillaq这个全局变量的语句写在前面就好了。不要放在talents_main()这个函数里,再增加个函数专门初始化mozilla这个全局变量。

评论:
    这个Bug真是的,本来已经打算考虑跨浏览器,但却不做彻底,还不如不做!!!


无忧JS宝库
http://www.51js.com/51js/main2.htm

2005年07月11日

        当年IBM打造IBM PC兼容机的时候,目的可是为了对抗Apple的PC。可惜后来由于IBM自己的失误,空让Intel 和Microsoft 做大,而后Apple却用了IBM的CPU。现如今微软又要用IBM的CPU苹果也要用Intel的CPU,变变换换看的我是眼花缭乱!
       《先锋周报》No.26

2005年07月09日

可怜的小鸟,一飞就飞到墙上,然后摔下来~
http://blog.donews.com/gzpbx/gallery/image/87225.aspx

和我的宠物乌龟在一起!
http://blog.donews.com/gzpbx/gallery/image/87224.aspx

2005年07月08日

飞机票、火车票都可以~

2005年07月06日

装的版本是番茄花园 Windows XP Pro SP2 免激活 2 in 1 ,感觉上没什么不一样,过一阵子把公司的电脑也给重装了~

2005年07月05日

display:inline 的作用[转载]

display显示属性允许使用四个值中的一个来定义一个元素:
block (在元素的前和后都会有换行)
inline (在元素的前和后都不会有换行)
list-item (与block相同, 但增加了目录项标记)
none (没有显示)

对于下列元素来说,此属性的默认值为 block :
ADDRESS
QUOTE BODY XMP CENTER COL COLGROUP DD DIR DIV DL DT FIELDSET FORM Hn HR
IFRAME LEGEND LISTING MARQUEE MENU OL P PLAINTEXT PRE TABLE TD TH TR UL


对于下列元素来说,此属性的默认值为 none :
BR FRAME nextID TBODY TFOOT THEAD

对于下列元素来说,此属性的默认值为 list-item :
LI

其他元素默认值都是 inline 。

2005年8月15日补:

       这个网站介绍的更好:display