禁用轮播中的拖动

Posted

技术标签:

【中文标题】禁用轮播中的拖动【英文标题】:Disable dragging in Carousel 【发布时间】:2011-11-27 02:28:23 【问题描述】:

是否可以禁用拖动以在轮播面板之间切换? 我只想使用指标。

【问题讨论】:

【参考方案1】:

只是为 Sencha Touch 2.0 的人们扔了这个。上述解决方案不适用于 Sencha Touch 2.0,但有一个非常简单的解决方法。

Ext.define('Ext.LockableCarousel', 
    extend: 'Ext.Carousel',
    id: 'WelcomeCarousel',
    initialize: function () 
       this.onDragOrig = this.onDrag;
       this.onDrag = function (e)  if(!this.locked)this.onDragOrig(e); 
    ,
    locked: false,
    lock: function ()  this.locked = true; ,
    unlock: function ()  this.locked = false; 
);

这将完全像一个轮播,除了现在你可以调用 .lock 和 .unlock 。所以你可以这样做:

Ext.Viewport.add(Ext.create('Ext.LockableCarousel',  
     id: 'LockableCarousel',
     fullscreen: true,
     hidden: false,
     items: [
        
           html : 'Item 1',
           style: 'background-color: #5E99CC'
        ,
        
           html : '<a href="#" onclick="Ext.getCmp(\'LockableCarousel\').lock();">Lock</a><br /><a href="#" onclick="Ext.getCmp(\'LockableCarousel\').unlock();">Unlock</a>',
           style: 'background-color: #759E60'
        
     ]
));

【讨论】:

感谢代码示例。它甚至禁用了指示器,所以我确实只需要暂时锁定轮播。 非常简单。我将“锁定”变量移动到配置对象中,以便在添加自定义轮播时设置默认锁定状态。这会将访问锁定的 var 更改为:this.getLocked();【参考方案2】:

尝试在 Carousel 中覆盖 afterRender 方法;(我删除了 childs 方法上的拖动事件)

   afterRender : function() 
        Ext.Carousel.superclass.afterRender.call(this);
        this.mon(this.body, 
        direction : this.direction,
        scope : this
        );
        this.el.addCls(this.baseCls + "-" + this.direction)
    

完整的代码;

 this.car =  new Ext.Carousel(
                ui       : 'light',
                items: [
                
                        html: '<p>Carousels can be vertical and given a ui of "light" or "dark".</p>',
                        cls : 'card card1'
                    ,
                    
                        html: 'Card #2',
                        cls : 'card card2'
                    ,
                    
                        html: 'Card #3',
                        cls : 'card card3'
                    ],
                        afterRender : function() 
                            Ext.Carousel.superclass.afterRender.call(this);
                            this.mon(this.body, 
                                direction : this.direction,
                                scope : this
                            );
                            this.el.addCls(this.baseCls + "-" + this.direction)
                        
        );

【讨论】:

谢谢,它有效。但我不确定它是怎么做的 :) 你能解释一下吗? 当然。想法很简单。我们必须禁用拖动,在这种情况下,可以删除拖动侦听器。在 sencha-touch.js 的 afterRender 方法中添加了拖动监听器。我们重写了 afterRender 方法,所以 sencha-touch 的 afterRender 方法不会运行,我们的新方法运行并且我们的方法不会添加拖动监听器。我希望这个描述是清楚的。 :)

以上是关于禁用轮播中的拖动的主要内容,如果未能解决你的问题,请参考以下文章

Rails 应用程序中的引导轮播,显示所有图像,不显示缩略图。在轮播中显示数据库中的图像

jquery自动轮播图代码只能出现一张图片第二三张就空白了 轮播正常播放

[swiper4.0]自动轮播+循环轮播

jquery图片上下轮播的问题,怎么实现自动轮播?

jquery简单自动轮播图代码怎么写

自动轮播本地图片触摸暂停轮播