如何禁止mui-slider的拖动,只需点击转换列表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何禁止mui-slider的拖动,只需点击转换列表相关的知识,希望对你有一定的参考价值。
参考技术A 我没系统学习过Jave Swing的相关知识,基本上靠摸索出来的一点经验,供参考。1、可以通过编写MouseClickedCallback回调函数实现所需功能。其它或许还有更好的做法,但就我目前所知,可能MouseClickedCallback是比较合适的,因MousePressedCallback和MouseReleasedCallback也可能会和拖动滚动条操作冲突。
2、需要获取点击鼠标时的位置,这可以通过MouseClickedCallbackData数据获取。该数据中有相对控件的位置和绝对位置,我采用的做法是通过匹配MOUSE_CLICKED后面括号中的内容提取数据。数据为double类型,需首先转换为字符串进行匹配。
3、确定鼠标在滚动条中所对应的数据,有三点需要特别注意:
(1)滚动条的方向:由Orientation确定,0为横向(默认),1为纵向。
(2)边距:貌似横向和纵向不同,分别为15和10(不知是否有某属性可以获取该值)。
(3)垂直滚动条的数据是从下向上的,但鼠标位置则以上面为基准位置,需要进行一个简单的变换。
4、目前的局限:
(1)未区分鼠标的左键和右键。
(2)未考虑滚动条采用其它单位时的处理。
(3)就目前所实现的而言,可以看到有一个先滑动固定距离,然后再到达指定位置的过程,想不出有什么办法可以克服。
5、补充:
(1)点击位置在滚动条范围内时直接到达该位置,如果在两端点击,则仍按照滚动固定距离处理,这是有意为之;
(2)可以使用MouseReleasedCallback回调函数代替MouseClickedCallback,效果似乎没
有差别(注意获取数据的细节有些差别)。
参考代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function slider_scorebar_click_callback(varargin)
d = get(gcbo);
m = char(d.MouseClickedCallbackData);
p = 'MOUSE_CLICKED,(';
m = char(d.MouseClickedCallbackData);
inx = strfind(m,p);
m = m(inx+length(p):end);
inx = strfind(m,')');
pos = str2num(m(1:inx(1)-1));
if ~d.Orientation % 横向
s = d.Width;
p = pos(1);
offset = 15;
else % 纵向
s = d.Height;
p = s - pos(2);
offset = 10;
end
if p >= offset && p <= s-offset
mx = d.Maximum;
mn = d.Minimum;
v=mn+(p-offset)/(s-2*offset)*(mx-mn);
set(gcbo,'value',v);
end
如果使用MouseReleasedCallback回调函数,参考代码为:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function slider_scorebar_release_callback(varargin)
d = get(gcbo);
m = char(d.MouseReleasedCallbackData);
p = 'MOUSE_RELEASED,(';
inx = strfind(m,p);
m = m(inx+length(p):end);
inx = strfind(m,')');
pos = str2num(m(1:inx(1)-1));
if ~d.Orientation % 横向
s = d.Width;
p = pos(1);
offset = 15;
else % 纵向
s = d.Height;
p = s - pos(2);
offset = 10;
end
if p >= offset && p <= s-offset
mx = d.Maximum;
mn = d.Minimum;
v=mn+(p-offset)/(s-2*offset)*(mx-mn);
set(gcbo,'value',v);
end
如何在 ag 网格中获取拖动的列定义?
【中文标题】如何在 ag 网格中获取拖动的列定义?【英文标题】:How to get dragged column definition in ag grid? 【发布时间】:2020-11-06 01:40:59 【问题描述】:问题: 当用户拖动列时如何找出正在拖动的列。
我尝试在 gridoptions 上使用 ondragstarted,但它没有给出正在拖动的列?
目标: 如果用户在 dom 内的特定 div 上拖放网格外的列,我需要执行一些操作。
【问题讨论】:
【参考方案1】:您可以尝试绑定到包含被拖动列的详细信息的columnMoved
事件。试试下面的
模板
<ag-grid-angular
#agGrid
(columnMoved)="onChange($event)"
[gridOptions]="gridOptions"
>
</ag-grid-angular>
控制器
onChange(event)
console.log(event.columns[0].colId); // <-- column ID
console.log(event.columns[0].colDef.headerName); // <-- column header name
console.log(event.columns[0].colDef.field); // <-- column field
【讨论】:
columnMoved 仅在您在网格区域内移动时才给出移动的列。如果列被拖到网格外,它不会提供详细信息。如果用户在特定区域的网格外拖放列,我需要执行一些操作。【参考方案2】:您可以尝试将 (columnVisible) 与检查源 = "uiColumnDragged" 一起使用。
onColumnVisible(e)
if(e.source === "uiColumnDragged")
//Add your logic
【讨论】:
以上是关于如何禁止mui-slider的拖动,只需点击转换列表的主要内容,如果未能解决你的问题,请参考以下文章