Events:zh-cn

From Valve Developer Community
Jump to: navigation, search
English

Panorama事件是一种用来沟通多个板元素的方法。受支持的事件有很多种,有些事件是通用的,有些则只适用于某几种板。大多数支持JS代码的板也支持使用事件。

Panorama events are a way to communicate information between multiple panels. There are many different event types, some of which are generally useful and some that are only useful on specific Panels. Most places that accept javascript functions will also accept events.

下面是一个使用事件的简例:

.DemoButton
{
    width: 50px;
    height: 50px;
    background-color: black;
}
.Toggled
{
    background-color: blue;
}
/* Using events */
<Button class="DemoButton" onactivate="ToggleStyle( Toggled )" />

/* Using javascript */
<Button class="DemoButton" onactivate="$.ToggleStyle( 'Toggled' )" />

Multiple events can be fired at the same time by using a semicolon between them:

<Button class="DemoButton" onactivate="ToggleStyle( Toggled ); AddStyle( HasBeenActivated )" />

有些事件也可以将其他事件作为变量:

<!-- Toggle the style after 0.5 seconds -->
<Button class="DemoButton" onactivate="AsyncEvent( 0.5, ToggleStyle( Toggled ) )" />

事件常规

事件总是由某个板发出的,但是并不总是由这个板处理。事件使用下列运算进行处理:

  1. 发出事件的板获得对事件进行首次处理的机会。
  2. 如果该板没有处理这个事件,板的父类将获得对事件进行处理的机会。
  3. 如果没有任何父类对事件做出处理,“未处理事件处理器”将会被调用并试图处理事件。

当你从一个子类发出一个事件,但是希望父类去处理事件的时候,这种方法就显得非常有用了。比如说:

<Panel id="Scroller" style="flow-children: down; overflow: squish scroll;">
  <Label text="假设这里有一堆文本。" />
  <Label text="多到需要用到滚动条 />
  <Label text="..." />
  <Button id="ScrollToTopButton" onactivate="ScrollToTop()">
    <Label text="Scroll to Top" />
  </Button>
</Panel>

在这个例子中,尽管事件ScrollToTop() 是由#ScrollToTopButton发出的,但是是由它的父类#Scroller 最终处理的。

the ScrollToTop() event is fired on the #ScrollToTopButton, the parent #Scroller is the one that actually handles it.

板事件

板事件是一种特殊的事件类型,它的第一个参数(可选)是所希望发出事件的板的ID。这样就可以让一个事件从其他一些板那里轻松地修改属性。 Panel events are a special type of event whose first parameter is optionally the ID of the panel you want the event to fire on. This allows an event to easily modify properties off of some other panel.

几个例子:

<Panel id="Controls">
  <!-- AddStyle会向Control1添加“Clicked”类。尽管Addstyle是一个板事件,但是它并未选择使用板ID作为第一个变量(记住这是可选的)。-->
  <Button id="Control1" onactivate="AddStyle( Clicked )" />

  <!-- AddStyle将对#Controls板添加“Clicked”类。-->
  <Button id="Control2" onactivate="AddStyle( Controls, Clicked )" />

  <!-- AddStyle将对#SomeOtherPanel板添加“Clicked”类,尽管这些板并不属于这个按钮的继承类。 -->
  <Button id="Control3" onactivate="AddStyle( SomeOtherPanel, Clicked )" />
</Panel>
<Panel id="SomeOtherPanel" />

注意,只有在同一个XML布局文件内的板ID才能被事件调用。

默认事件属性

Panorama支持一系列能够在与玩家互动时自动发出事件(或者javascript)的属性。大多数这样的事件和HTML5的属性一致,除了一些panorama特有的附加属性,和一些HTML5不支持的属性。

属性 描述
onload 板已完成加载。
onactivate 板被鼠标/键盘/控制器等的操作激活。
onmouseactivate 板被鼠标操作激活。
oncontextmenu 用户右键点击了该板,或按下了键盘上的内容菜单键。
onfocus 板获得了键盘聚焦(译者注:按一下tab,程序就会切换所选中的控件,就是键盘聚焦的形式之一。)
ondescendantfocus 板的继承之一获得了键盘聚焦。
onblur 板失去键盘聚焦。
ondescendantblur 板的继承之一失去了键盘聚焦。
oncancel 玩家按下了ESC键。
onmouseover 鼠标开始悬停在板上。
onmouseout 鼠标结束悬停在板上。
ondblclick 用户双击了板。
onmoveup 用户试图从板向上移动(上箭头键)。User tried to move up from this panel (arrow key up).
onmovedown 用户试图从板向下移动(下箭头键)。
onmoveleft 用户试图从板向左移动(下箭头键)。
onmoveright 用户试图从板向右移动(右箭头键)。
ontabforward 用户试图从该板正向跳格(tab)(译者注:单tab键为正向,shift+tab为逆向)。
ontabbackward 用户试图从该板逆向跳格(shift+tab)
onselect 板被选择
ondeselect 板失去选择
onscrolledtobottom 板被完全滚动到底部。
onscrolledtorightedge 板被完全滚动到右边缘

事件列表

Generated using dump_panorama_events on 8/16/2015.

事件 是否是板事件 描述
AddStyle(string class) Yes 向板添加一个css类。
AddStyleToEachChild(string class) Yes 向板的所有继承添加一个CSS类。
AsyncEvent(float delay, event eventToFire) No 在一定延迟(以秒记)后发出另一个事件。
DOTAHideAbilityTooltip() Yes 隐藏技能栏。
DOTAHideBuffTooltip() Yes 隐藏BUFF栏。
DOTAHideEconItemTooltip() Yes 隐藏经济/物品栏。
DOTAHideProfileCardTooltip() Yes 隐藏英雄头像。
DOTAHideTextTooltip() Yes 隐藏文本框。
DOTAHideTitleImageTextTooltip() Yes 隐藏图片文本框。
DOTAHideTitleTextTooltip() Yes Hide the title text tooltip.
DOTAShowAbilityTooltip(string abilityName) Yes 显示技能栏。
DOTAShowAbilityTooltipForEntityIndex(string abilityName, int32 entityIndex) Yes 显示技能栏。等级信息将从由实体索引具体化的实体获取。
DOTAShowBuffTooltip(int32 entityIndex, int32 buffSerial, bool bOnEnemy) Yes Show a buff tooltip for the specified entityIndex + buff serial.
DOTAShowEconItemTooltip(uint16 itemDef, uint8 styleIndex, int32 heroID) Yes 根据指定物品、样式、英雄,显示经济物品栏。0表示默认样式,-1表示默认英雄。
DOTAShowProfileCardTooltip(uint64 steamID, bool useProName) Yes Show a user's profile card. Use pro name determines whether to use their professional team name if applicable.
DOTAShowTextTooltip(string text) Yes 显示包含指定信息的提示栏。
DOTAShowTextTooltipStyled(string text, string style) Yes 显示包含指定信息的提示栏。同时应用名为“style”的CSS类来使用定制样式。
DOTAShowTitleImageTextTooltip(string title, string imagePath, string text) Yes 显示包含指定标题、图像、文本的提示栏。
DOTAShowTitleImageTextTooltipStyled(string title, string imagePath, string text, string style) Yes 显示包含指定标题、图像、文本的提示栏。同时应用名为“style”的CSS类来使用定制样式。
DOTAShowTitleTextTooltip(string title, string text) Yes 显示包含指定标题和文本的提示栏。
DOTAShowTitleTextTooltipStyled(string title, string text, string style) Yes 显示包含指定标题和文本的提示栏。同时应用名为“style”的CSS类来使用定制样式。
IfHasClassEvent(string class, event eventToFire) Yes 如果该板含有指定的类,则发出另一个事件。
IfHoverOtherEvent(string otherPanelID, event eventToFire) Yes 如果光标悬浮在某个具有特定ID的板上,则发出另一个事件。
IfNotHasClassEvent(string class, event eventToFire) Yes 如果该板不含有指定的类,则发出另一个事件
IfNotHoverOtherEvent(string otherPanelID, event eventToFire) Yes - MovePanelDown(int32 repeatCount) Yes 从一个板向下移动。默认情况下,聚焦位置将会被改变,但某些类型的板可能会做出不同的操作。
MovePanelLeft(int32 repeatCount) Yes - MovePanelRight(int32 repeatCount) Yes 从一个板向右移动。默认情况下,聚焦位置将会被改变,但某些类型的板可能会做出不同的操作。
MovePanelUp(int32 repeatCount) Yes 从一个板向上移动。默认情况下,聚焦位置将会被改变,但某些类型的板可能会做出不同的操作。
PageDown() No 将板向下滚动一页。
PageLeft() No 将板向左滚动一页。
PagePanelDown() Yes 将板向下滚动一页。
PagePanelLeft() Yes 将板向左滚动一夜。
PagePanelRight() Yes 将板向右滚动一页
PagePanelUp() Yes 将板向上滚动一页。
PageRight() No 将板向右滚动一页。
PageUp() No 将板向上滚动一页。
RemoveStyle(string class) Yes 从板中移除一个 CSS类。
RemoveStyleFromEachChild(string class) Yes 从板的所有的子板中移除一个CSS类。
ScrollDown() No 将板向下滚动一行。
ScrollLeft() No 将板向左滚动一行。
ScrollPanelDown() Yes 将板向下滚动一行。
ScrollPanelLeft() Yes 将板向左滚动一行。
ScrollPanelRight() Yes 将板向右滚动一行。
ScrollPanelUp() Yes 将板向上滚动一行。
ScrollRight() No 将板向右滚动一行。
ScrollToBottom() Yes 将板滚动到底部。
ScrollToTop() Yes 将板滚动到顶部
ScrollUp() No 将板向上滚动一行。
SetChildPanelsSelected(bool selected) Yes 设定所有子板是否被选择。
SetInputFocus() Yes 将聚焦设定到此板上。
SetPanelSelected(bool selected) Yes 设定该板是否被选择。
TogglePanelSelected() Yes 切换该板的被选择状态。
ToggleStyle(string class) Yes 切换该板是否含有某CSS类。

Warning: Display title "Events:zh-cn" overrides earlier display title "Panorama事件".