【问题标题】:Always show the tip text of Slider in Extjs在 Extjs 中总是显示 Slider 的提示文本
【发布时间】:2013-02-18 08:01:18
【问题描述】:

在 Extjs 4.1.1a 中,如何保持滑块的tip text 始终可见?

目前,只要用户拖动滑块的栏,tip text 就会可见。
我搜索了docs,但找不到任何相关概念。

如果没有记录或不可能,请解释我如何手动创建tip texttip text 应该沿着滑块的条移动,并且它不应超过或隐藏任何其他相邻组件。

这是我生成一个简单滑块的代码:

xtype:'slider',
cls: 'sliderStyle',
width: "80%",
id: 'slider',
value: 6,
minValue: 1,
maxValue: 12,
useTips: true,

tipText: function(thumb){
    var months = ['','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
    var value = Ext.String.format(months[thumb.value]);
    return value;
},

问题 2:鼠标悬停在滑块上时是否至少可以显示 tip text

PS:我也问过同样的问题here

编辑 1: 我还使用两个相邻按钮(<>)移动滑块的搜索栏。因此,必须注意,如果我使用相邻按钮移动搜索栏,那么 tip text 也应该移动。

编辑 2:将鼠标悬停在滑块或相邻按钮上时,提示文本应该可见。

回答http://jsfiddle.net/WdjZn/1/

【问题讨论】:

    标签: javascript extjs extjs4 extjs4.1 extjs-mvc


    【解决方案1】:

    我已经设法通过覆盖Ext.slider.Tip 中的一些事件处理程序来保持提示可见:

    Ext.define('AlwaysVisibleTip', {
        extend: 'Ext.slider.Tip',
    
        init: function(slider) {
            var me = this;
            me.callParent(arguments);
            slider.removeListener('dragend', me.hide);
            slider.on({
                scope: me,
                change: me.onSlide,
                afterrender: function() {
                    setTimeout(function() {
                        me.onSlide(slider, null, slider.thumbs[0]);
                    }, 100);
                }
            });
        }
    });
    
    Ext.create('Ext.slider.Single', {
        animate: false,
        plugins: [Ext.create('AlwaysVisibleTip')],
        // ...
    });
    

    查看demo

    我的方法的缺点:

    1. 它依赖于私有方法onSlide
    2. 仅适用于单个滑块
    3. 只有在animate 设置为false 时,键盘导航才能正常工作
    4. setTimeout 用于调整笔尖的初始位置

    修复这个缺点不仅需要破解Ext.slider.Tip 类,还需要破解Ext.slider.Multy 类,可能还有Ext.slider.Thumb 类。

    编辑

    changecomplete 事件替换为change 事件,因为在调用slider.setValue() 时不会触发changecomplete

    添加了带有相邻按钮的滑块demo

    编辑2

    tipText 如果使用自定义提示插件,则不再应用配置。您必须使用插件的getText 配置:

    Ext.create('Ext.slider.Single', {
        animate: false,
        plugins: [Ext.create('AlwaysVisibleTip',{
            getText: function(thumb) {
                var months = ['','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
                return Ext.String.format(months[thumb.value]);
            }
        })],
        // ...
    });
    

    更新了demo

    【讨论】:

    • +1 感谢您的详细解释,但我无法理解 :)。我现在正在努力理解它。
    • 你的例子很棒,但正如我在编辑中提到的那样,我还用两个相邻的按钮控制栏。如果我在两个相邻按钮的帮助下移动栏,提示文本不会移动。
    • @Mr_Green,是的。我使用了changecomplete,而我应该使用change 事件。编辑答案并修复演示。
    • 你非常接近。 tip text 总是后退一步。我的意思是以前的值。如果我将值从2 滑动到32,则tip text 将停留在2 并显示值32
    • @Mr_Green,这是因为滑块动画了拇指的运动。您必须像我的演示一样使用animate: false 设置滑块。
    【解决方案2】:

    对于 extjs 4.2,
    更改:
    slider.removeListener('dragend', me.hide);
    至:
    slider.removeListener('dragend', me.hide, me);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-01
      • 2015-02-09
      • 1970-01-01
      • 2012-02-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-14
      • 1970-01-01
      相关资源
      最近更新 更多