Panorama事件
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 ) )" />
事件常规
事件总是由某个板发出的,但是并不总是由这个板处理。事件使用下列运算进行处理:
- 发出事件的板获得对事件进行首次处理的机会。
- 如果该板没有处理这个事件,板的父类将获得对事件进行处理的机会。
- 如果没有任何父类对事件做出处理,“未处理事件处理器”将会被调用并试图处理事件。
当你从一个子类发出一个事件,但是希望父类去处理事件的时候,这种方法就显得非常有用了。比如说:
<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
最终处理的。
theScrollToTop()
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 | 鼠标开始悬停在板上。获得选择器 :hover |
onmouseout | 鼠标结束悬停在板上。失去选择器 :hover |
ondblclick | 用户双击了板。 |
onmoveup | 用户试图从板向上移动(上箭头键)。 |
onmovedown | 用户试图从板向下移动(下箭头键)。 |
onmoveleft | 用户试图从板向左移动(下箭头键)。 |
onmoveright | 用户试图从板向右移动(右箭头键)。 |
ontabforward | 用户试图从该板正向跳格(tab)(译者注:单tab键为正向,shift+tab为逆向)。 |
ontabbackward | 用户试图从该板逆向跳格(shift+tab) |
onselect | 板获得选择器 :selected |
ondeselect | 板失去选择器 :selected |
onscrolledtobottom | 板被完全滚动到底部。 |
onscrolledtorightedge | 板被完全滚动到右边缘 |
事件列表
Generated using dump_panorama_events on 9/20/2021 by 西索酱.
更多整理在 https://www.npmjs.com/package/@mobilc/panorama-type
事件 | 板事件? | 描述 |
---|---|---|
AddStyle(string class)
|
Yes | 向板添加一个css类。 |
AddStyleAfterDelay(string class, float pre-delay)
|
Yes | Add a CSS class to a panel after a specified delay. |
AddStyleToEachChild(string class)
|
Yes | 向板的所有继承添加一个CSS类。 |
AddTimedStyle(string class, float duration, float pre-delay)
|
Yes | Add a class for a specified duration, with optional pre-delay; clears existing timers when called with same class. |
AsyncEvent(float delay, event eventToFire)
|
No | 在一定延迟(以秒记)后发出另一个事件。 |
DOTADisplayDashboardTip(string string, string optional string)
|
No | Tip to display, panel to attach to (default 'DefaultTipAttachment') |
DOTAHideAbilityTooltip()
|
Yes | 隐藏技能栏。 |
DOTAHideBuffTooltip()
|
Yes | 隐藏BUFF栏。 |
DOTAHideDroppedItemTooltip()
|
Yes | Hide the dropped item tooltip |
DOTAHideEconItemTooltip()
|
Yes | 隐藏经济/物品栏。 |
DOTAHideProfileCardBattleCupTooltip()
|
Yes | Hide the profile card / battle cup tooltip. |
DOTAHideProfileCardTooltip()
|
Yes | 隐藏英雄头像。 |
DOTAHideRankTierTooltip()
|
Yes | Hide the rank tier tooltip. |
DOTAHideRuneTooltip()
|
Yes | Hide the rune tooltip |
DOTAHideTextTooltip()
|
Yes | 隐藏文本框。 |
DOTAHideTI10EventGameTooltip()
|
Yes | Hide the ti10 event game tooltip |
DOTAHideTitleImageTextTooltip()
|
Yes | 隐藏图片文本框。 |
DOTAHideTitleTextTooltip()
|
Yes | Hide the title text tooltip. |
DOTALiveStreamUpcoming(uint32 time)
|
Yes | Notify change in RTime32 we expect the stream to start |
DOTALiveStreamVideoLive(bool isLive)
|
Yes | Notify change in video state (is it pointing at a live stream page or not) |
DOTAShowAbilityInventoryItemTooltip(int32 entityIndex, int32 inventorySlot)
|
Yes | Show tooltip for an item in the entityIndex NPC's inventory. |
DOTAShowAbilityShopItemTooltip(string abilityName, string guideName, int32 entityIndex)
|
Yes | Show tooltip for an item in the entityIndex NPC's shop. |
DOTAShowAbilityTooltip(string abilityName)
|
Yes | 显示技能栏。 |
DOTAShowAbilityTooltipForEntityIndex(string abilityName, int32 entityIndex)
|
Yes | 显示技能栏。等级信息将从由实体索引具体化的实体获取。 |
DOTAShowAbilityTooltipForGuide(string abilityName, string guideName)
|
Yes | Show an ability tooltip annotated with a particular guide's info. |
DOTAShowAbilityTooltipForHero(string abilityName, int32 heroid, bool)
|
Yes | Show an ability tooltip for the specified hero. |
DOTAShowAbilityTooltipForLevel(string abilityName, int32)
|
Yes | Show an ability tooltip for a specific level. |
DOTAShowBuffTooltip(int32 entityIndex, int32 buffSerial, bool bOnEnemy)
|
Yes | Show a buff tooltip for the specified entityIndex + buff serial. |
DOTAShowEconItemTooltip(class item_definition_index_t itemDef, class style_index_t styleIndex, int32 heroID)
|
Yes | 根据指定物品、样式、英雄,显示经济物品栏。0表示默认样式,-1表示默认英雄。 |
DOTAShowProfileCardBattleCupTooltip(uint64 steamID)
|
Yes | Show the battle cup portion of the user's profile card, if it exists |
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. |
DOTAShowRankTierTooltip(uint64 steamID, enum EDOTAPlayerMMRType)
|
Yes | Show the rank tier tooltip for a user |
DOTAShowRuneTooltip(int32 X, int32 Y, int32 RuneType)
|
Yes | Show a rune tooltip in the X Y location for the rune type |
DOTAShowTextTooltip(string text)
|
Yes | 显示包含指定信息的提示栏。 |
DOTAShowTextTooltipStyled(string text, string style)
|
Yes | 显示包含指定信息的提示栏。同时应用名为“style”的CSS类来使用定制样式。 |
DOTAShowTI10EventGameTooltip(struct TI10EventGameTooltipInfo_t const * __ptr64 X)
|
Yes | Show a ti10 event game tooltip |
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类来使用定制样式。 |
DropInputFocus()
|
Yes | Drop focus entirely from the window containing this panel. |
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 | 如果光标悬浮在某个不具有特定ID的板上,则发出另一个事件。 |
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类。 |
RemoveStyleAfterDelay(string class, float pre-delay)
|
Yes | Remove a CSS class from a panel after a specified delay. |
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 | 将聚焦设定到此板上。 |
SetPanelEnabled(bool enabled)
|
Yes | Sets whether the given panel is enabled |
SetPanelSelected(bool selected)
|
Yes | 设定该板是否被选择。 |
SwitchStyle(string slot, string class)
|
Yes | Switch which class the panel has for a given attribute slot. Allows easily changing between multiple states. |
TogglePanelSelected()
|
Yes | 切换该板的被选择状态。 |
ToggleStyle(string class)
|
Yes | 切换该板是否含有某CSS类。 |
TriggerStyle(string class)
|
Yes | Remove then immediately add back a CSS class from a panel. Useful to re-trigger events like animations or sound effects. |