html component(htc)入门(转)
发布日期:2021-08-19 11:10:08 浏览次数:11 分类:技术文章

本文共 3262 字,大约阅读时间需要 10 分钟。

  官方文档

 

HTC是HTML Component的缩写,是IE5及后续版本浏览器所支持的客户端组件。HTC就是一组以DHTML为基础封装了客户端行为的脚本,每HTC以*.htc的文件存储,一个HTC是一个客户端“类”。

编写HTC最重要的一点是知道element对象的意思,它代表了当前的HTC,类似于C#类中的this。例如element.innerHTML可以访问当前HTC对象在document中所包含的html代码。既然HTC是“类”,它当然有属性、方法、事件,下面简要说明其定义方式:

l         <PUBLIC:COMPONENT></PUBLIC:COMPONENT>:定义HTC,这个标签是其他定义的父元素。

2         <PUBLIC:PROPERTY NAME=”pName” GET=”getMethod” PUT=”putMethod” />: 定义HTC的属性,里面三个定义分别代表属性名、读取属性、设置属性时HTC所调用的方法。

3         <PUBLIC:METHOD NAME=”mName” />:定义HTC的方法,NAME定义了方法名。

4         <PUBLIC:EVENT NAME=”eName” ID=”eId” />:定义了HTC的事件,NAME定义了事件名,ID是个可选属性,在HTC中唯一标识这个事件。

5         <PUBLID:ATTACH EVENT=”sEvent” ONEVENT=”doEvent” />:定义了浏览器传给HTC事件的相应方法,其中EVENT是浏览器传入的事件,ONEVENT是处理事件的方法。

常用的HTC定义就这么多,嘿嘿。

我们经常看到某些网页上有这样的效果:用户点击一个按钮,文本显示,再次点击这个按钮,文本消失,但浏览器并不刷新。下面我就用HTC来实现这个简单效果。编程思路是这样的:用HTC模拟一个开关,它有”on”和”off”两种状态(可读/写属性status);用户可以设置这两种状态下开关所显示的文本(设置属性 turnOffText和turnOnText);用户点击开关时,开关状态被反置,并触发一个事件(onStatusChanged)通知用户,用户可以自己写代码来响应这个事件;该HTC还定义了一个方法(reverseStatus),用来反置开关的状态。下面是这个HTC的代码:

<!—switch.htc定义 -->

<PUBLIC:COMPONENT TAGNAME="Switch">

    <!--属性定义-->

    <PUBLIC:PROPERTY NAME="turnOnText" PUT="setTurnOnText" VALUE="Turn on" />

    <PUBLIC:PROPERTY NAME="turnOffText" PUT="setTurnOffText" VALUE="Turn off" />

    <PUBLIC:PROPERTY NAME="status" GET="getStatus" PUT="setStatus" VALUE="on" />

    <!--定义事件-->

    <PUBLIC:EVENT NAME="onStatusChanged" ID="changedEvent" />

    <!--定义方法-->

    <PUBLIC:METHOD NAME="reverseStatus" />

    <!--关联客户端事件-->

    <PUBLIC:ATTACH EVENT="oncontentready" ONEVENT="initialize()"/>

    <PUBLIC:ATTACH EVENT="onclick" ONEVENT="expandCollapse()"/>

</PUBLIC:COMPONENT>

<!-- htc脚本 -->

<script language="javascript">

    var sTurnOnText;    //关闭状态所显示的文本

    var sTurnOffText;   //开启状态所显示的文本

    var sStatus;    //开关状态

    var innerHTML   //使用开关时包含在开关中的HTML

   

    //设置开关关闭状态所显示的文本

    function setTurnOnText(value)

    {

        sTurnOnText = value;

    }

 

    //设置开关开启状态所显示的文本

    function setTurnOffText(value)

    {

        sTurnOffText = value;

    }

   

    //设置开关状态

    function setStatus(value)

    {

        sStatus = value;

    }

 

     //读取开关状态

    function getStatus()

    {

        return sStatus;

    }

   

    //反向开关的状态

    function reverseStatus()

    {

    sStatus = (sStatus == "on") ? "off" : "on";

    }

    //获取htc控制界面html文本

    function getTitle()

    {

        var text = (sStatus == "on") ? sTurnOffText : sTurnOnText;

    text = "<div id='innerDiv'>" + text + "</div>";

    return text;

    }

 

    //htc初始化代码

    function initialize()

    {

    //back up innerHTML

    innerHTML = element.innerHTML;

    element.innerHTML = (sStatus == "on") ? getTitle() + innerHTML : getTitle();

    }

 

    //响应用户鼠标事件的方法

    function expandCollapse()

    {

    reverseStatus();

    //触发事件

    var oEvent = createEventObject();

    changedEvent.fire(oEvent);

   

    var srcElem = element.document.parentWindow.event.srcElement;

    if(srcElem.id == "innerDiv")

    {

        element.innerHTML = (sStatus == "on") ? getTitle() + innerHTML : getTitle();

    }

    }

</script>

下面是如何使用这个HTC,注释写的比较清楚了,不再多解释了!

 

<!--learnhtc.html-->

<html xmlns:frogone><!--定义一个新的命名空间-->

<head>

    <!--告诉浏览器命名空间是由哪个HTC实现的-->

    <?IMPORT namespace="frogone" implementation="switch.htc">

</head>

<body>

   <!--设置开关的各个属性及内部包含的内容-->

   <frogone:Switch id="mySwitch"

                    TurnOffText="off"

                    TurnOnText="on"

                    status="off"

                    onStatusChanged="confirmChange()">

        <div id="dBody">文本内容...... </div>

    </frogone:Switch>

</body>

<script language="javascript">

    //相应开关事件

    function confirmChange()

    {

        if(!confirm("是否改变开关状态?"))

            mySwitch.reverseStatus();

    }

</script>

</html>

 

转载于:https://www.cnblogs.com/ethelhao/p/3783433.html

转载地址:https://blog.csdn.net/weixin_30924087/article/details/97004597 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:python常用模块和对象编程
下一篇:Scala编程--函数式对象

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月12日 17时03分47秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

开源项目|RT-Thread 软件包应用作品:小闹钟 2019-04-29
在 RT-Thread Studio 上使用 RT-Thread Nano 2019-04-29
开源项目|软件包应用作品:通用物联网系统平台 2019-04-29
【经验分享】RT-Thread UART设备驱动框架初体验(中断方式接收带\r\n的数据) 2019-04-29
单片机里面的CPU使用率是什么鬼? 2019-04-29
推荐一个优质Linux技术公众号-作者都是一线Linux代码贡献者们哦 2019-04-29
RT-Thread 编程风格指南 2019-04-29
95后高校电子教师,软硬兼修有趣有料! 2019-04-29
使用 STM32 通用 Bootloader ,让 OTA 更加 Easy 2019-04-29
Cache 的基本概念与工作原理 2019-04-29
装机量超亿台 RISC-V +IoT OS!中科蓝讯与RT-Thread战略合作,共推自主物联网生态发展 2019-04-29
Android程序员必备!面试一路绿灯Offer拿到手软,Android面试题及解析 2019-04-29
Android程序员的春天!12个View绘制流程高频面试题,分享PDF高清版 2019-04-29
深入交流安卓!新鲜出炉的Android面试真题集锦我给你们整理出来了!Android面试题及解析 2019-04-29
深入浅出Android开发!你会的还只有初级工程师的技术吗?一线互联网公司面经总结 2019-04-29
深度剖析原理!超全Android中高级面试复习大纲,含BATJM大厂 2019-04-29
温故而知新!Android开发者该学习哪些东西提高竞争力?成功入职阿里 2019-04-29
火爆知乎的Android面试题-Android-App的设计架构经验谈,大厂内部资料 2019-04-29
看完直接怼产品经理!Android多进程从头讲到尾,跳槽薪资翻倍 2019-04-29
快速从入门到精通!面试的时候突然遇到答不上的问题怎么办?已拿到offer 2019-04-29