htc使用方式(转)

一.htc的两种使用方式:

  1. 关联行为(Attach Behavior): IE 5.0以上支持, htc 技术出现的初衷. 主要目的是把对象复杂的样式变化包装起来,替代 javascript + css.
  2. 元素行为(Element Behavior): IE 5.5以上支持, htc 技术的高级应用. 主要目的是用htc创建html文件中的自定义标签(相当于jsp技术中自定义标签).

二.关联行为示例 (在Windows Xp, IE6.0中测试)

  1. 编写.htc文件. (style.htc)

<public:attach event="onmouseover" onevent="f_mouse_over()"/>

<public:attach event="onmouseout" onevent="f_mouse_out()"/>

<public:attach event="onclick" onevent="f_click()"/>

<public:method name="makeDisplay()"/>

<public:method name="makeUnDisplay()"/>

<script>

function f_mouse_over(){ //使字体显红色,位置右移5px

element.style.color="red";

element.style.posLeft+=5;

}

function f_mouse_out() { //使字体显蓝色,位置左移5px

element.style.color="blue";

element.style.posLeft-=5;

}

function f_click(){  //点击鼠标后变成辉光显示,可用onmousedown,onmouseup事件细化处理

element.style.color="red";

element.style.filter="glow(color=red,strength=2)";

}

function makeDisplay(){    //使该对象可见

element.style.display="block";

}

function makeUnDisplay(){  //使该对象不可见

element.style.display="none";

}

</script>

2.编写 html文件 (test.html)

<html>

<head>

<style>

.testStyle{

behavior:url(style.htc);

}

</style>

</head>

<body>

<div style="width:200px;height:200px" class="testStyle" id="testDiv">Test Text;Please move mouse on this area!</div><br/>

<button onclick="testDiv.makeDisplay();" name="display"/><button onclick="testDiv.makeUnDisplay();" name="no display"/>

</body>

</html>

3.说明: 理论上htc文件里可以用className修改对象的样式,用的是html里的样式,htc里面用style定义的样式不能用. 但是,修改了className后可能对象就不再与本htc样式关联,本htc样式对该对象就没有作用了.

三. 元素行为示例 (WindowsXp, IE6.0上测试)

  1. 编写.htc文件 (element.htc)

<public:component tagName="loginForm">

<public:property name="userName" value="用户名"/>

<public:property name="password" value="密码"/>

<public:property name="action"/>

<public:property name="firstStyle"/>  <!--用户名输入框的样式 -->

<public:property name="secondStyle"/>

<public:attach event="oncontentready" onevent="init()"/>

<public:method name="close"/>

<public:defaults tabStop=true  contentEditable=false canHaveHTML=true viewInheritStyle=false viewMasterTab=false/>

</public:component>

<style>

.name{
        
background-color:red;
       }

.pass{
        
background-color:blue;
      
}

</style>

<script>

var
_table;

function init(){

if (typeof(action)=="undefined" || action==null){

alert("Action property is missing!");

return;

}//action 属性必须
          
var
_form=document.createElement("<form></form>");
          
_form.action=action;

_table=document.createElement("<table></table>");
          
var oTr1=_table.insertRow();
          
var oTd1=oTr1.insertCell();
          
oTd1.innerText=userName+":";
          
var oTd2=oTr1.insertCell();
          
var _userName=document.createElement("<input
type=text></input>");
          
if (typeof(firstStyle)!="undefined" &&
firstStyle!=null){
            
_userName.className=firstStyle;
          
}
          
oTd2.appendChild(_userName);
          
var oTr2=_table.insertRow();
          
var oTd3=oTr2.insertCell();
          
oTd3.innerText=password+":";
          
var oTd4=oTr2.insertCell();
          
var _password=document.createElement("<input
type=password></input>");
          
if (typeof(secondStyle)!="undefined" &&
secondStyle!=null){
            
_password.className=secondStyle;
          
}
          
oTd4.appendChild(_password);
          
oTr3=_table.insertRow();
          
oTd5=oTr3.insertCell();
          
var _okBtn=document.createElement("<input
type=submit></input>");
          
oTd5.appendChild(_okBtn);
          
oTd6=oTr3.insertCell();
          
var _resetBtn=document.createElement("<input
type=reset></input>");
          
oTd6.appendChild(_resetBtn);

_form.appendChild(_table);

document.body.appendChild(_form);

defaults.viewLink=document;

}

function close(){ //调用时删除自身
          
var allEle=document.body.childNodes;
          
for (var i=0;i<allEle.length;i++){
            
document.body.removeChild(allEle[i]);
          
}
        }

</script>

<body></body>

二.编写.html 文件 (test.html)

<html>
      
<head>
       
<?xml:namespace prefix="custom"/>
       
<?IMPORT NAMESPACE="custom"
IMPLEMENTATION="element.htc"/>

<style>
        
.name{
          
color:red;
        
}
        
.pass{
          
color:blue;
        
}
     
 </style>
     
</head>
     
<body>
       
<custom:loginForm action="/login.do" id="aaa" firstStyle="name"
secondStyle="pass"></custom:loginForm><br/>
      
 <input type="button" onclick="aaa.close();"
value="删除登录框"/>
    
</body>
    
</html>

3.说明: 在htc里用javascript生成的元素可以加在自定义控件中(用document.body.appendChild()),也可以直接加在主html文件中(用window.document.body.appendChild()).
(htc文件和宿主html文件共用一个window对象,所以htc可以直接控制html文件)

4.htc官方msdn文档:htc参考

时间: 2024-10-02 02:30:25

htc使用方式(转)的相关文章

css经典布局——头尾固定高度中间高度自适应布局

今天说说一个经典布局:头尾固定高度中间高度自适应布局! 转文请标明 --- 出处:穆乙 http://www.cnblogs.com/pigtail/ 相信做过后台管理界面的同学,都非常清楚这个布局.最直观的方式是框架这个我不想多写费话,因为我们的重心不在这里.如果有不了解的同学可以百度.google.这里我不得不吐下槽!! 百度实在让我这个“粉丝”失望.就目前情况来说,百度已经完全轮为“有钱人排行榜”!再也不顾及用户的搜索需求了,因为主导地位实在是:不可撼动! 不相信的同学,可以亲身对比下B

基于AngularJS的企业软件前端架构[转载]

这篇是我参加QCon北京2014的演讲内容: 提纲: 企业应用在软件行业中占有很大的比重,而这类软件多数现在也都采用B/S的模式开发,在这个日新月异的时代,它们的前端开发技术找到了什么改进点呢? B/S企业软件前端开发模式大体上与桌面软件类似,都是偏重量级的,在前端可能会有较多的业务逻辑,这些业务逻辑如何被合理模块化,与界面分离,以便测试,成为这个领域的一个重要挑战.另一方面,由于企业应用的界面相对规整,偏重的是数据存取,没有太多花哨的东西,所以常见的界面控件也是可枚举的,如何让开发界面的工作能

Unity HTC VIVE手柄 按键说明

一.HTC VIVE手柄按键图说明 1 - 菜单键 6 - 系统键(按下后手柄断开连接,再次按下手柄再次连接上) 7 - 扳机键 8 - 握持键 9 - 触摸板键 二.按键的监听方式 1.按键监听方式一:(SteamVR的方式,封装了OpenVR) (1)点击触发:通过Device.GetPressDown / GetPressUp / GetPress获取按键事件 (2)触摸触发:通过device .GetTouchDown / GetTouchUp / GetTouch获取按键事件 2.按键

CSS hack方式

史上最全的CSS hack方式一览 做前端多年,虽然不是经常需要hack,但是我们经常会遇到各浏览器表现不一致的情况.基于此,某些情况我们会极不情愿的使用这个不太友好的方式来达到大家要求的页面表现.我个人是不太推荐使用hack的,要知道一名好的前端,要尽可能不使用hack的情况下实现需求,做到较好的用户体验.可是啊,现实太残酷,浏览器厂商之间历史遗留的问题让我们在目标需求下不得不向hack妥协,虽然这只是个别情况.今天,结合自己的经验和理解,做了几个demo把IE6~IE10和其他标准浏览器的C

Android ListView两种长按弹出菜单方式

* 知识点1:ListView item:两种长按弹出菜单方式* 知识点2:ListView SimpleAdapter的使用*  知识点 3:在java代码中创建一个ListView*/ -----------------------------------------------------Activity[mw_shl_code=java,true]package org.gxl.com; public class ListOnLongClickActivity extends Activ

如何透过HTC Vive拍摄Mixed Reality (混合现实)影片

https://www.vive.com/cn/forum/1706?extra=page%3D1 也许你是一位开发者,想为自己的HTC Vive游戏制作酷炫的宣传片:或者你是游戏主播,想为观众带来高质量的VR直播体验:甚至你是一位VR的爱好者.无论如何,如果你对Mixed Reality(混合现实)感兴趣,请继续看下去.本文将介绍如何用HTC Vive拍摄高质量MR视频. ======================================================== 什么是M

史上最全的CSS hack方式一览

做前端多年,虽然不是经常需要hack,但是我们经常会遇到各浏览器表现不一致的情况.基于此,某些情况我们会极不情愿的使用这个不太友好的方式来达到大家要求的页面表现.我个人是不太推荐使用hack的,要知道一名好的前端,要尽可能不使用hack的情况下实现需求,做到较好的用户体验.可是啊,现实太残酷,浏览器厂商之间历史遗留的问题让我们在目标需求下不得不向hack妥协,虽然这只是个别情况.今天,结合自己的经验和理解,做了几个demo把IE6~IE10和其他标准浏览器的CSS hack做一个总结,也许本文应

android 三种定位方式

一共有三种定位方式,一种是GPS,一种是通过网络的方式,一种则是在基于基站的方式,但是,不管哪种方式,都需要开启网络或者GPS 首先添加权限 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 在C

HTC Desire 816刷机教程(图文)

HTC Desire 816刷机教程也来了,今天在这里主要是来说说如何刷机的,这个刷机是采用卡刷的方式,也就是利用第三方的recovery来刷入第三方的zip包,因为第三方的zip包都是支持卡刷的,很多人不会,尤其是一些新手感觉比较麻烦,不知道如何操作,下在就来给大家说说详细的刷机步骤吧: 一:HTC Desire 816刷机前准备工作: 1:下载rom刷机包,点击这里下载,这里提供的有相关的卡刷包,如果你的手里已经有rom卡刷包了也可以,下载其它地方的rom包也可以,只要是支持卡刷的就行,因为