Skip to content
slint
export component Example inherits Window { width:270px; height:100px;
 Flickable { viewport-height:300px; Text { x:0; y:150px; text: "This is some text that you have to scroll to see"; } }}

Flickable 是一个底层元素,是可滚动控件(例如 ScrollView)的基础。当 viewport-widthviewport-height 分别大于父元素的 widthheight 时,元素变为可滚动。请注意,Flickable不会创建滚动条。未设置时,viewport-widthviewport-height 将根据 Flickable 的子元素自动计算。使用 for循环填充元素时,情况并非如此。这是一个在问题 #407中跟踪的错误。 Flickable 的最大和首选大小基于视口。

不属于布局时,其宽度或高度在未指定时默认为父元素的100%。

##指针事件交互

如果 Flickable 的区域包含使用 TouchArea 进行点击操作的元素(例如 Button控件),则使用以下算法来区分用户滚动或与 TouchArea元素交互的意图:

  1. 如果 Flickableinteractive 属性为 false,则所有事件都将转发到底层元素。
  2. 如果在与 TouchArea交互的事件坐标处接收到按下事件,则该事件将被存储,并且任何后续的移动和释放事件将按以下方式处理:
  3. 如果100ms 内没有任何事件,则存储的按下事件将传递给 TouchArea
  4. 如果在100ms过去之前接收到释放事件,则存储的按下事件以及释放事件将立即传递给 TouchArea,并且算法重置。 3.接收到的任何移动事件都将在满足以下所有条件时在 Flickable 上启动 flicking操作:
  5. 该事件在接收到按下事件后的500ms 内被接收。
  6. 到按下事件的距离在我们允许移动的方向上超过8个逻辑像素。 如果 Flickable决定 flick,则先前发送到 TouchArea 的任何按下事件都将跟随一个 exit事件。在接收移动事件的阶段,flickable跟随坐标。
  7. 如果按下、移动和释放事件的交互从与 TouchArea 不相交的坐标开始,则当到按下事件坐标的欧几里得距离超过8个逻辑像素时,Flickable将在指针移动事件上立即 flick。

Flickable边界内发生的所有指针和鼠标事件都由 Flickable本身拦截,不会传播到其下方的任何元素。

##滚轮/滚动事件交互

Flickable 还支持使用鼠标滚轮和触摸板滚动手势进行滚动。 无论 interactive 属性如何,它都会滚动。 如果 Flickable可以在事件方向上滚动,则该事件将被拦截。 如果 Flickable 不能在事件方向上滚动,则该事件将转发给父元素。

##属性

interactive

布尔值 默认:true

slint
Flickable { interactive: false;}

flickable interactive

当为 true 时,可以通过单击视口并使用光标拖动来滚动视口。

viewport-width

长度 默认:0px

可滚动元素的总宽度。

viewport-height

长度 默认:0px

可滚动元素的总高度。

viewport-x

长度 (in-out) 默认:0px

可滚动元素相对于 Flickable 的位置。这通常是一个负值。

viewport-y

长度 (in-out) 默认:0px

可滚动元素相对于 Flickable 的位置。这通常是一个负值。

##回调

flicked()

viewport-xviewport-y 由于用户操作(拖动、滚动)而改变时调用。

基于 MIT 协议发布