È possibile disabilitare l'uso del trascinamento per passare tra i pannelli del carosello? Voglio usare solo un indicatore.Disabilita trascinamento nel carosello
risposta
Prova di override AfterRender metodo a Carousel, (ho tolto eventi di trascinamento sul metodo 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)
}
codice intero;
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)
}
});
Basta lanciare questo fuori per le persone Sencha Touch 2.0. La soluzione sopra descritta non funziona con Sencha Touch 2.0, ma c'è un lavoro piuttosto semplice.
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; }
});
Questo funzionerà esattamente come un carosello, tranne che ora è possibile chiamare .lock e .unlock su di esso. Quindi potresti fare qualcosa del tipo:
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'
}
]
}));
Grazie per il codice di esempio. Disabilita anche l'indicatore, quindi è tutto ciò di cui avevo bisogno per bloccare temporaneamente la giostra. –
Assolutamente semplice. Ho spostato la var 'bloccata' nell'oggetto config in modo da poter impostare lo stato bloccato predefinito quando si aggiunge il carosello personalizzato. Questo cambia l'accesso alla var bloccata a: this.getLocked(); – daxiang28
Soluzione molto bella, funziona alla grande. Grazie! – Phil
Grazie, funziona. Ma non sono sicuro di come funziona :) Puoi spiegarlo? – Egor4eg
Ovviamente. L'idea è semplice Dobbiamo disabilitare il trascinamento e in tal caso è possibile rimuovere il listener di trascinamento. Trascina il listener aggiunto nel metodo afterRender in sencha-touch.js. Sostituiamo il metodo afterRender in modo che il metodo afterRender di sencha-touch non venga eseguito, il nostro nuovo metodo viene eseguito e il nostro metodo non aggiungerà il listener di trascinamento. Spero che questa descrizione sia chiara. :) –
Grazie, ho avuto l'idea. – Egor4eg