FloatingBehavior补遗:Location属性与move事件

简介:
  FloatingBehavior在 官方文档中的例子似乎只有对其最简单使用方式的介绍,却没有对其Location属性和move事件的说明。虽然它们非常简单,我想可能还是需要了解一下 的。FloatingBehavior的Class Library在本人前面的文章《 补充部分官方文档里没有的Client Library以及代码提示Schema更新 》中有说明。我们从一个简单的例子来看这两个成员:

  首先,我们定义一些CSS类:
< style >
    body 
{  font-family :  Arial ;  font-size :  12px ;   }
    #handle 
{  background-color :  #EEEEEE ;   }
    #floatDiv 
{  width :  100px ;  border :  solid 1px black ;  height :  100px ; }
    .red 
{ color :  red ; }
</ style >

  注意在使用FloatingBehavior时需要引入AtlasUIDragDrop这个Framework Script:
< atlas:ScriptManager  ID ="ScriptManager1"  runat ="server" >
    
< Scripts >
        
< atlas:ScriptReference  ScriptName ="AtlasUIDragDrop"   />
    
</ Scripts >
</ atlas:ScriptManager >

  然后是所需的HTML元素:
< div  style ="height:300px; border:solid 1px black;" >
    
< div  id ="location" > Drop to change color. </ div >
    
< div  id ="floatDiv" >
        
< div  id ="handle" > Handle </ div >
        
< div > blablabla </ div >
    
</ div >
</ div >

  其中最外层的高300px的容器,这个是拖动的有效区域。只有在页面范围内的拖动才会有效,这也就是为什么有朋友会遇到在自己的例子中拖动后会回到原处的情况,这是因为简单的例子页面区域就是很小的一块,所以被拖动的元素无法停留。

  接下来就是最重要的Atlas Script了:
< script  type ="text/xml-script" >
    
< page  xmlns:script ="http://schemas.microsoft.com/xml-script/2005" >
        
< components >
            
< label  id ="location" >
                
< bindings >
                    
< binding  dataContext ="floating"  dataPath ="location"  property ="text"   />
                
</ bindings >
            
</ label >
            
< control  id ="floatDiv" >
                
< behaviors >
                    
< floatingBehavior  id ="floating"  handle ="handle"  location ="100, 50" >
                        
< move >
                            
< invokeMethod  target ="location"  method ="toggleCssClass" >
                                
< parameters  className ="red"   />
                            
</ invokeMethod >
                        
</ move >
                    
</ floatingBehavior >
                
</ behaviors >
            
</ control >
        
</ components >
    
</ page >
</ script >

  FloatingBehavior的move事件会在浮动元素落在有效范围内(上面的例子里则是最外层高300px的div)触发,触发时 id为location的div的前景色会在红与白之间切换。而FloatingBehavior的Location属性以字符串“x, y”形式设定了浮动元素的坐标,在set_Location内部Behavior会调用Sys.UI.Control.setLocation“静态”方 法来设置浮动元素的位置。自然,我们能通过binding来访问这个属性,可以看到在id为location的div里会根据当前behavior的 location当前值而改变。如果将浮动元素拖动至有效范围外的话,那么它就会回到原处,move事件也不会触发。

  很自然,move事件除了使用Xml Element形式调用Action之外,也能以填写Xml Attribute来调用javascript方法。先修改上面一行Atlas Script代码以Xml Attribute方法调用comfirmDrop函数:
< floatingBehavior  id ="floating"  handle ="handle"  location ="100, 50"  move ="confirmDrop" >
    ...
</ floatingBehavior >

  再增加一个javascript函数:
< script  language ="javascript" >
    
function  confirmDrop(sender, args)
    {
        
var  msg  =   " Do you really want to drop the control at  "   +  sender.get_location()  +   " ? " ;
        
if  ( ! confirm(msg))
        {
            args.set_canceled(
true );
        }
    }
</ script >

  在这里,sender就是那个当前的FloatingBehavior对象,而args就是大名鼎鼎的 Sys.CancelEventArgs!因此我们能够相当方便的使用args.set_canceled(true)来取消这次移动。在示范中也可以很 方便的看出,如果用户在Confirm Dialog中选择了“Cancel”,那么漂浮的控件就会回到原处。

  这个就是对FloatingBehavior的Location属性和move事件的介绍,可以看出,有了binding,Declarative Syntax本身又是多么的优雅。有了Atlas,编写javascript代码有多么的轻松。

  本文所用例子的源代码,可以点击这里下载。如果您希望查看效果,请点击这里


本文转自 jeffz 51CTO博客,原文链接:http://blog.51cto.com/jeffz/60950,如需转载请自行联系原作者

相关文章
|
12月前
16avalon - 指令ms-attr(属性绑定)
16avalon - 指令ms-attr(属性绑定)
63 1
|
JavaScript
js节点、属性操作,计时器,location、history对象,常见键盘事件
js节点、属性操作,计时器,location、history对象,常见键盘事件
layui嵌套弹出模态框的Blocked a frame with origin null from的解决方案
layui嵌套弹出模态框的Blocked a frame with origin null from的解决方案
170 0
|
11月前
window.location对象使用
window.location对象使用
57 0
|
Java Android开发 C++
Framework 全局监听屏幕点击事件 INPUT_EVENT_INJECTION
Framework 全局监听屏幕点击事件 INPUT_EVENT_INJECTION
289 0
window.open()的一些操作属性
_media : url所指向的页面加载到Media Bar所包含的HTML代码区域中.如果没有Media Bar则加到本身.
|
前端开发
前端面试题:1.页面加载完成(onload)之前触发的事件;2.History,Location,Window,Navigation的区别;3.e.target和e.currentTarget的区别
★Navagator:提供有关浏览器的信息 ★Window: Window对象处于对象层次的最顶层, 它提供了处理Navagator窗口的方法和属性 ★Location:提供了与当前打开的URL-工作的方 法和属性,是一个静态的对象 ★History:提供了与历史清单有关的信息 ★Document:包含与文档元素一起工作的对象,它将这些元素封装起来供编程人员使用
258 0
|
JavaScript 前端开发 开发者
BOM(一)概述、history对象、location对象、navigator对象、事件
BOM(一)概述、history对象、location对象、navigator对象、事件
219 0
BOM(一)概述、history对象、location对象、navigator对象、事件
ADI
|
缓存 前端开发 Android开发
[记录] window.location对象实现页面刷新
[记录] window.location对象实现页面刷新
ADI
387 0
SAP Spartacus auto focus Directive响应模型变化的一些触发时机例子
SAP Spartacus auto focus Directive响应模型变化的一些触发时机例子
102 0
SAP Spartacus auto focus Directive响应模型变化的一些触发时机例子