知识大全 为你的DHTML添活力

Posted

篇首语:与其降低你的开支,不如去尝试增加你的收入。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 为你的DHTML添活力相关的知识,希望对你有一定的参考价值。

为你的DHTML添活力  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  *purpleendurer修正了原文中的一些错误

  你可以通过IE为你的HTML元素添加行为 建立面向对象的页面设计方法 Phillip Perkins建立了一个<DIV>对象 当用户拖动它时 它会在限定的<DIV>内继续定向运行

  Macromedia Flash可以使开发者免受网络浏览器与互操作解决方案的限制 但是 局限于Flash让你无法体验到网络浏览器的许多特色

  例如 你可以通过IE为HTML元素添加行为 建立对象面向的页面设计方法 在这个例子中 我会建立了一个<DIV>对象 当用户拖动它时 它会在限定的<DIV>内继续定向运行

  为HTML添加行为的能力是设计的一个关键部分 在IE中 这通过相关的样式来实现 添加行为的样式特性即 behavior 你可以通过嵌套的<STYLE>标签来添加行为 就像这样

  <style>DIV object behavior: url(Behavior htc);

  从这段脚本中 你可以发现一个行为会提及到一个HTC(HTML组件)文件 既然我们具有对象化这些HTML元素的基础 我们就能建立控制它们的行为脚本

  表A中包含了为我们的嵌套<DIV>对象建立行为的所有代码 在这一个组件内就有许多的代码

  表 A 文件ponent htc的内容


  <public:ponent ligheight= true >

  <public:attach event= onmousedown onevent= element_onmousedown() />

  <public:attach event= onmousemove onevent= element_onmousemove() />

  <public:attach event= onmouseup onevent= element_onmouseup() />

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

  <public:attach event= onselectstart onevent= element_onselectstart() />

  <public:attach event= ondragstart onevent= element_ondragstart() />

  <public:attach event= onload for= window onevent= Init() />

  <public:method name= moveMe />

  <public:property name= clickPoint get= get_clickPoint put= put_clickPoint />

  <public:property name= interval get= get_interval put= put_interval />

  <script language= JScript >var m_bStarted = false;var m_bMoving = false;var m_clickPoint = null;var m_tStart = ;var m_tEnd = ;var m_ptStart = null;var m_Slope = null;var m_interval = ;var m_isMoving = false;var m_trash = ;var m_dX = ;var m_dY = ;var m_vectX = ;var m_vectY = ;var m_pNode = null;var m_bounds = [];var BOUNDS = left : top : right : bottom : ;var m_dimensions = [];var DIMS = width : height : ;

  function Init()    element id = element document uniqueId;    var m_pNode = element parentNode;    m_bounds = [                      parseInt(m_pNode currentStyle width)                 parseInt(m_pNode currentStyle height)                ];    m_dimensions = [    Node            parseInt(element offsetWidth)                 parseInt(element offsetHeight)                ];

  

  function element_onmousedown()    m_bStarted = true;    m_tStart = new Date();    clearInterval(m_interval);    m_Slope = null;    m_ptStart = null;    m_trash = ;    m_dX = ;    m_dY = ;    m_vectX = ;    m_vectY = ;    m_clickPoint = new Point(event x event y);    m_ptStart = new Point(part(element currentStyle left) parseInt(element currentStyle top));

  

  function element_onmouseup()    if (!m_bMoving) return;    m_bMoving = false;    m_bStarted = false;    m_tEnd = new Date();    var t = m_tEnd valueOf() m_tStart valueOf();    var lPoint = new Point(event x event y);    m_Slope = Geometry slope(m_clickPoint lPoint);    var ptEnd = m_Slope add(m_ptStart);    element style left = ptEnd posX + px ;    element style top = ptEnd posY + px ;    var spd = ;    if (m_Slope deltaX != && m_Slope deltaY != )            spd = Math sqrt(Math pow(m_Slope deltaX ) + Math pow(m_Slope deltaY ))/t;        else     spd = (m_Slope deltaX + m_Slope deltaY)/t;   

  if (spd > ) spd = ;    m_dX = m_Slope deltaX;    m_dY = m_Slope deltaY;    if (m_dX != ) m_vectX = (m_dX > ) ? : ;    if (m_dY != ) m_vectY = (m_dY > ) ? : ;    startMove(element parseInt( /spd));

  function element_onmousemove()    m_bMoving = m_bStarted;    if (!m_bMoving) return;    var lPoint = new Point(event x event y);    var lSlope = Geometry slope(m_clickPoint lPoint);    var ptEnd = lSlope add(m_ptStart);    element style left = ptEnd posX + px ;    element style top = ptEnd posY + px ;

  function element_onselectstart()    event returnValue = false;    return false;

  function element_ondragstart()    event returnValue = false;    return false;

  function get_clickPoint()    return m_clickPoint;

  function put_clickPoint(o)    if (typeof(o) == object && nstructor == Point )            m_clickPoint = o;        else            alert( Expected Point );   

  function get_interval()    return m_interval;

  function put_interval(n)    m_interval = n;

  function moveMe()    if (m_isMoving) return;    setTimeout( m_isMoving = true; );    var newX = parseInt(element currentStyle left);    var newY = parseInt(element currentStyle top);    var dXabs = Math abs(m_dX);    var dYabs = Math abs(m_dY);    if (dXabs > dYabs)            //divide both by deltaX        //each call move X by and Y by Y/X        //if iteration > then move Y by         //and add remainder back on Y        newX += m_vectX;        var l_step = (m_dY/m_dX) * ;        m_trash = m_trash + l_step;        if (m_trash > || m_trash < )             newY += m_vectY;            m_trash = m_vectX;                else            //vice versa        newY += m_vectY;        var l_step = (m_dX/m_dY) * ;        m_trash = m_trash + l_step;        if (m_trash > || m_trash < )              newX += m_vectX;            m_trash = m_vectX;                if (newX <= m_bounds[BOUNDS left])            newX = m_bounds[BOUNDS left] + ;        m_vectX *= ;        else if ((newX + m_dimensions[DIMS width]) >= m_bounds[BOUNDS right])            newX = m_bounds[BOUNDS right] m_dimensions[DIMS width] ;        m_vectX *= ;   

  if (newY <= m_bounds[BOUNDS top])            newY = m_bounds[BOUNDS top] + ;        m_vectY *= ;        else if ((newY + m_dimensions[DIMS height]) >= m_bounds[BOUNDS bottom])            newY = m_bounds[BOUNDS bottom] m_dimensions[DIMS height] ;        m_vectY *= ;   

  element style left = newX + px ;    element style top = newY + px ;    setTimeout( m_isMoving = false; );</script>

  </public:ponent>


  如果你注意到了脚本的顶部 在那里有一个特殊的标签告诉浏览器该用何种样式呈现特性和包含组件的方法 以及将这一组件添加到哪些事件中 这些事件都是标准的HTML事件

  当组件(在装载事件中)初始化时 它获得一个uniqueID 将其包含的母体记录在一个数字变量中 并为进程计算设定缺省值 当你逐句通过这一对象的目标处理器时 你会看到每当用户点击对象时 element_onmousedown() 一些变量进行了初始化 下一步 用户应该将对象拖动到另一个位置

  当用户在屏幕上拖动对象时— element_onmousemove() —对象的位置发生改变 以与鼠标的运动相匹配 然后 用户应该释放鼠标按钮 让对象自行移动

  当用户释放鼠标按钮— element_onmouseup() —或是鼠标脱离了对象区域— element_onmouseout() —时 释放点即被记录下来 并对用户点击对象到释放对象的时间进行计算 对象则获得永恒运动 通过计算得出点击起始点与释放终止点的斜度 这个斜度成为对象新的移动路径 通过对象移动的距离与拖动时间可计算出用户拖动对象的速度 这个速度再又用来建立对象的移动方式 最终 速度的倒数被用来建立对象位置更新的时间间隔

  在间隔中断事件— moveMe() —中 对象的上升(rise)与运动(run)将方向斜度转换成计算的运动路径 将较大的方向改变与较小的方向改变区分开来 我们就可以做到这点 结果是 其中一个方向改变总是 而另一个则小于 在每次中断中 两个方向改变中较大的一个由一个向量单元增加 可能是 或是 个像素 另一个则增加较小方向改变的两倍(即 如果上升为 而运动为 的话 那么上升将增加 *向量而运动每次增加 * 单元) 如果较小的改变增量超过向量单元( 或 )的话

  如果对象的新位置位于限定元素之外 向量则发生改变以与之相匹配 这种方法将对象 反弹 到限定元素之外

  表B是含有这些组件的HTML页面

  表 B 的内容


  <>

  <head>

  <style>DIV bounds    width: px;    height: px;    border: px red solid;    overflow: hidden;

  

  DIV object    position:absolute;    left: px;    top: px;    border: px blue solid;    behavior: url(ponent htc);    cursor: hand;

  </style>

  <script language= JavaScript >

  function Point(pX pY)    this posX = pX;    this posY = pY;

  function CSlope(P P )    this deltaY = P posY P posY;    this deltaX = P posX P posX;    this m = (P posY P posY)/(P posX P posX);

  function _slopeAdd(P )    var lPoint = new Point((P posX + this deltaX) (P posY + this deltaY));    return lPoint;

  CSlope prototype add = _slopeAdd;

  function CGeometry()

  function _slope(P P )    var lSlope = new CSlope(P P );    return lSlope;

  CGeometry prototype slope = _slope;var Geometry = new CGeometry();var objStack = [];

  function startMove(obj t)    var id = objStack push(obj);    objStack[id ] interval = setInterval( objStack[ + (id ) + ] moveMe() t);</script>

  </head>

  <body >

  <center><div class= bounds id= divBounds name= divBounds onselectstart= window event returnValue = false; ><div class= object >dog</div></div></center></body></>


  HTML页面不过是包含<DIV>及作为组件元素的嵌套<DIV> 在JavaScript内 有一些支持对象与功能来帮助进行组件计算 值得注意的是 有一个对象栈— objStack —变量 在间隔中断过程中 可以用来帮助管理对组件moveMe()方法的调用

cha138/Article/program/Java/JSP/201311/19564

相关参考

怎样吃使你更年轻

生活中有很多小细节,也许你不曾注意,但是它们却影响着我们的青春、健康和美貌。我们为你总结了生活中的10个小细节,掌握好它们,为你的年轻指数添上一笔吧!以下10个细节让你越活越年轻!1.清晨醒来时多吃食

知识大全 用JavaScript为你的网站加密

用JavaScript为你的网站加密  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!我们经常会遇到一

让宠物为你的心疗伤

同是自然界的生物,不少动物却世代为人类的生活、生长和生命服务,有的成为人类的朋友,有的干脆就是为人的生存而生而死。在不同的发展时期,随着人类生存状态的变化,动物群体也在不断地转换角色。现如今,于人类而

景观设计为你的家装饰一个时尚户外区域空间?

景观设计为你的家装饰一个时尚户外区域空间?景观设计是一个更重要的空间。通常,景观设计可以用来灌输一个无缝体验取决于家庭的主题。例如,要创建影响的经验一个即简主义者或日本式的家,你会想要一个简单的、流线

知识大全 大家提提建议。

我追求一个女孩子,让我追一个月让他动心,不动心就做普通朋友,我该怎么追的呀!大家提提建议。为你的难过而快乐的,是敌人为你的快乐而快乐的,是朋友为你的难过而难过的就是那些,该放进心里的人冷漠,有时候并不

知识大全 巧用身体语言为你面试加分

演员比普通人更喜欢研究肢体预言,这能够帮助他们让萤幕形象抽离于本身。缄口沉默的时候,身体在说话。这是肢体语言的神秘之处——泄漏你的心思,传达你的情感。面试高潮又来了。除了做好专业的知识准备,心理准备也

知识大全 男朋友说他很爱你,可他从来都没有在QQ上为你写过签名,只会发一些很无聊的话题,没有公开过你的关系,

男朋友说他很爱你,可他从来都没有在QQ上为你写过签名,只会发一些很无聊的话题,没有公开过你的关系,  以下文字资料是由(本站网www.cha138.com)小编为大家搜集

知识大全 怎么样才能让自己充满活力?

怎么样才能让自己充满活力?这位同学你的现象是中学生中很常见的!首先要给自己树立信心,保持一个乐观向上的心态。转化到现实生活中呢,要多参加些有兴趣的活动及集体生活!比如踢踢足球,打打篮球等等。在这些活动

知识大全 面试礼仪为你加分

求职面试时如果注意一些小细节,给面试官留下好的印象,并不是一件难事。-面试必须准时公司企业很讲究办事效率,如果面试迟到,会让你的个人形象大打折扣。面试的时候,要清楚地介绍自己,注意保持微笑和眼神交流。

走出牛皮癣饮食误区的秘密通道

教你走出牛皮癣饮食误区的秘密通道,提醒牛皮癣患者千万不要让错误的饮食给你在治疗上添乱子,牛皮癣患者本身的各项身体指标都比较的弱,若是再加上错误的饮食,对牛皮癣患者来讲无疑是雪上加霜。专家为你指出走出牛