mirror of
https://gitee.com/layui/layui.git
synced 2025-07-15 05:13:26 +08:00
优化 carousel 代码书写规范
This commit is contained in:
parent
8239401823
commit
dda323caa0
@ -14,28 +14,39 @@ layui.define(['jquery', 'lay'], function(exports){
|
|||||||
|
|
||||||
// 外部接口
|
// 外部接口
|
||||||
var carousel = {
|
var carousel = {
|
||||||
config: {} //全局配置项
|
config: {}, // 全局配置项
|
||||||
|
|
||||||
// 设置全局项
|
// 设置全局项
|
||||||
,set: function(options){
|
set: function(options){
|
||||||
var that = this;
|
var that = this;
|
||||||
that.config = $.extend({}, that.config, options);
|
that.config = $.extend({}, that.config, options);
|
||||||
return that;
|
return that;
|
||||||
}
|
},
|
||||||
|
|
||||||
// 事件
|
// 事件
|
||||||
,on: function(events, callback){
|
on: function(events, callback){
|
||||||
return layui.onevent.call(this, MOD_NAME, events, callback);
|
return layui.onevent.call(this, MOD_NAME, events, callback);
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
// 字符常量
|
// 字符常量
|
||||||
,MOD_NAME = 'carousel', ELEM = '.layui-carousel', THIS = 'layui-this', SHOW = 'layui-show', HIDE = 'layui-hide', DISABLED = 'layui-disabled'
|
var MOD_NAME = 'carousel';
|
||||||
|
var ELEM = '.layui-carousel';
|
||||||
|
var THIS = 'layui-this';
|
||||||
|
var SHOW = 'layui-show';
|
||||||
|
var HIDE = 'layui-hide';
|
||||||
|
var DISABLED = 'layui-disabled'
|
||||||
|
|
||||||
,ELEM_ITEM = '>*[carousel-item]>*', ELEM_LEFT = 'layui-carousel-left', ELEM_RIGHT = 'layui-carousel-right', ELEM_PREV = 'layui-carousel-prev', ELEM_NEXT = 'layui-carousel-next', ELEM_ARROW = 'layui-carousel-arrow', ELEM_IND = 'layui-carousel-ind'
|
var ELEM_ITEM = '>*[carousel-item]>*';
|
||||||
|
var ELEM_LEFT = 'layui-carousel-left';
|
||||||
|
var ELEM_RIGHT = 'layui-carousel-right';
|
||||||
|
var ELEM_PREV = 'layui-carousel-prev';
|
||||||
|
var ELEM_NEXT = 'layui-carousel-next';
|
||||||
|
var ELEM_ARROW = 'layui-carousel-arrow';
|
||||||
|
var ELEM_IND = 'layui-carousel-ind';
|
||||||
|
|
||||||
// 构造器
|
// 构造器
|
||||||
,Class = function(options){
|
var Class = function(options){
|
||||||
var that = this;
|
var that = this;
|
||||||
that.config = $.extend({}, that.config, carousel.config, options);
|
that.config = $.extend({}, that.config, carousel.config, options);
|
||||||
that.render();
|
that.render();
|
||||||
@ -43,16 +54,16 @@ layui.define(['jquery', 'lay'], function(exports){
|
|||||||
|
|
||||||
// 默认配置
|
// 默认配置
|
||||||
Class.prototype.config = {
|
Class.prototype.config = {
|
||||||
width: '600px'
|
width: '600px',
|
||||||
,height: '280px'
|
height: '280px',
|
||||||
,full: false //是否全屏
|
full: false, // 是否全屏
|
||||||
,arrow: 'hover' //切换箭头默认显示状态:hover/always/none
|
arrow: 'hover', // 切换箭头默认显示状态:hover/always/none
|
||||||
,indicator: 'inside' //指示器位置:inside/outside/none
|
indicator: 'inside', // 指示器位置:inside/outside/none
|
||||||
,autoplay: true //是否自动切换
|
autoplay: true, // 是否自动切换
|
||||||
,interval: 3000 //自动切换的时间间隔,不能低于800ms
|
interval: 3000, // 自动切换的时间间隔,不能低于800ms
|
||||||
,anim: '' //动画类型:default/updown/fade
|
anim: '', // 动画类型:default/updown/fade
|
||||||
,trigger: 'click' //指示器的触发方式:click/hover
|
trigger: 'click', // 指示器的触发方式:click/hover
|
||||||
,index: 0 //初始开始的索引
|
index: 0 // 初始开始的索引
|
||||||
};
|
};
|
||||||
|
|
||||||
// 轮播渲染
|
// 轮播渲染
|
||||||
@ -85,15 +96,15 @@ layui.define(['jquery', 'lay'], function(exports){
|
|||||||
// 是否全屏模式
|
// 是否全屏模式
|
||||||
if(options.full){
|
if(options.full){
|
||||||
options.elem.css({
|
options.elem.css({
|
||||||
position: 'fixed'
|
position: 'fixed',
|
||||||
,width: '100%'
|
width: '100%',
|
||||||
,height: '100%'
|
height: '100%',
|
||||||
,zIndex: 9999
|
zIndex: 9999
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
options.elem.css({
|
options.elem.css({
|
||||||
width: options.width
|
width: options.width,
|
||||||
,height: options.height
|
height: options.height
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -104,6 +115,7 @@ layui.define(['jquery', 'lay'], function(exports){
|
|||||||
|
|
||||||
// 指示器等动作
|
// 指示器等动作
|
||||||
if(that.elemItem.length <= 1) return;
|
if(that.elemItem.length <= 1) return;
|
||||||
|
|
||||||
that.indicator();
|
that.indicator();
|
||||||
that.arrow();
|
that.arrow();
|
||||||
that.autoplay();
|
that.autoplay();
|
||||||
@ -120,32 +132,34 @@ layui.define(['jquery', 'lay'], function(exports){
|
|||||||
|
|
||||||
// 获取上一个等待条目的索引
|
// 获取上一个等待条目的索引
|
||||||
Class.prototype.prevIndex = function(){
|
Class.prototype.prevIndex = function(){
|
||||||
var that = this
|
var that = this;
|
||||||
,options = that.config;
|
var options = that.config;
|
||||||
|
|
||||||
var prevIndex = options.index - 1;
|
var prevIndex = options.index - 1;
|
||||||
|
|
||||||
if(prevIndex < 0){
|
if(prevIndex < 0){
|
||||||
prevIndex = that.elemItem.length - 1;
|
prevIndex = that.elemItem.length - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return prevIndex;
|
return prevIndex;
|
||||||
};
|
};
|
||||||
|
|
||||||
// 获取下一个等待条目的索引
|
// 获取下一个等待条目的索引
|
||||||
Class.prototype.nextIndex = function(){
|
Class.prototype.nextIndex = function(){
|
||||||
var that = this
|
var that = this;
|
||||||
,options = that.config;
|
var options = that.config;
|
||||||
|
|
||||||
var nextIndex = options.index + 1;
|
var nextIndex = options.index + 1;
|
||||||
|
|
||||||
if(nextIndex >= that.elemItem.length){
|
if(nextIndex >= that.elemItem.length){
|
||||||
nextIndex = 0;
|
nextIndex = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return nextIndex;
|
return nextIndex;
|
||||||
};
|
};
|
||||||
|
|
||||||
// 索引递增
|
// 索引递增
|
||||||
Class.prototype.addIndex = function(num){
|
Class.prototype.addIndex = function(num){
|
||||||
var that = this
|
var that = this;
|
||||||
,options = that.config;
|
var options = that.config;
|
||||||
|
|
||||||
num = num || 1;
|
num = num || 1;
|
||||||
options.index = options.index + num;
|
options.index = options.index + num;
|
||||||
@ -158,8 +172,8 @@ layui.define(['jquery', 'lay'], function(exports){
|
|||||||
|
|
||||||
// 索引递减
|
// 索引递减
|
||||||
Class.prototype.subIndex = function(num){
|
Class.prototype.subIndex = function(num){
|
||||||
var that = this
|
var that = this;
|
||||||
,options = that.config;
|
var options = that.config;
|
||||||
|
|
||||||
num = num || 1;
|
num = num || 1;
|
||||||
options.index = options.index - num;
|
options.index = options.index - num;
|
||||||
@ -172,8 +186,8 @@ layui.define(['jquery', 'lay'], function(exports){
|
|||||||
|
|
||||||
// 自动轮播
|
// 自动轮播
|
||||||
Class.prototype.autoplay = function(){
|
Class.prototype.autoplay = function(){
|
||||||
var that = this
|
var that = this;
|
||||||
,options = that.config;
|
var options = that.config;
|
||||||
|
|
||||||
if(!options.autoplay) return;
|
if(!options.autoplay) return;
|
||||||
clearInterval(that.timer);
|
clearInterval(that.timer);
|
||||||
@ -185,13 +199,13 @@ layui.define(['jquery', 'lay'], function(exports){
|
|||||||
|
|
||||||
// 箭头
|
// 箭头
|
||||||
Class.prototype.arrow = function(){
|
Class.prototype.arrow = function(){
|
||||||
var that = this
|
var that = this;
|
||||||
,options = that.config;
|
var options = that.config;
|
||||||
|
|
||||||
// 模板
|
// 模板
|
||||||
var tplArrow = $([
|
var tplArrow = $([
|
||||||
'<button class="layui-icon '+ ELEM_ARROW +'" lay-type="sub">'+ (options.anim === 'updown' ? '' : '') +'</button>'
|
'<button class="layui-icon '+ ELEM_ARROW +'" lay-type="sub">'+ (options.anim === 'updown' ? '' : '') +'</button>',
|
||||||
,'<button class="layui-icon '+ ELEM_ARROW +'" lay-type="add">'+ (options.anim === 'updown' ? '' : '') +'</button>'
|
'<button class="layui-icon '+ ELEM_ARROW +'" lay-type="add">'+ (options.anim === 'updown' ? '' : '') +'</button>'
|
||||||
].join(''));
|
].join(''));
|
||||||
|
|
||||||
// 预设基础属性
|
// 预设基础属性
|
||||||
@ -205,8 +219,8 @@ layui.define(['jquery', 'lay'], function(exports){
|
|||||||
|
|
||||||
// 事件
|
// 事件
|
||||||
tplArrow.on('click', function(){
|
tplArrow.on('click', function(){
|
||||||
var othis = $(this)
|
var othis = $(this);
|
||||||
,type = othis.attr('lay-type')
|
var type = othis.attr('lay-type')
|
||||||
that.slide(type);
|
that.slide(type);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@ -225,19 +239,19 @@ layui.define(['jquery', 'lay'], function(exports){
|
|||||||
|
|
||||||
// 指示器
|
// 指示器
|
||||||
Class.prototype.indicator = function(){
|
Class.prototype.indicator = function(){
|
||||||
var that = this
|
var that = this;
|
||||||
,options = that.config;
|
var options = that.config;
|
||||||
|
|
||||||
// 模板
|
// 模板
|
||||||
var tplInd = that.elemInd = $(['<div class="'+ ELEM_IND +'"><ul>'
|
var tplInd = that.elemInd = $(['<div class="'+ ELEM_IND +'"><ul>',
|
||||||
,function(){
|
function(){
|
||||||
var li = [];
|
var li = [];
|
||||||
layui.each(that.elemItem, function(index){
|
layui.each(that.elemItem, function(index){
|
||||||
li.push('<li'+ (options.index === index ? ' class="layui-this"' : '') +'></li>');
|
li.push('<li'+ (options.index === index ? ' class="layui-this"' : '') +'></li>');
|
||||||
});
|
});
|
||||||
return li.join('');
|
return li.join('');
|
||||||
}()
|
}(),
|
||||||
,'</ul></div>'].join(''));
|
'</ul></div>'].join(''));
|
||||||
|
|
||||||
// 预设基础属性
|
// 预设基础属性
|
||||||
options.elem.attr('lay-indicator', options.indicator);
|
options.elem.attr('lay-indicator', options.indicator);
|
||||||
@ -260,11 +274,11 @@ layui.define(['jquery', 'lay'], function(exports){
|
|||||||
|
|
||||||
// 滑动切换
|
// 滑动切换
|
||||||
Class.prototype.slide = function(type, num){
|
Class.prototype.slide = function(type, num){
|
||||||
var that = this
|
var that = this;
|
||||||
,elemItem = that.elemItem
|
var elemItem = that.elemItem;
|
||||||
,options = that.config
|
var options = that.config;
|
||||||
,thisIndex = options.index
|
var thisIndex = options.index;
|
||||||
,filter = options.elem.attr('lay-filter');
|
var filter = options.elem.attr('lay-filter');
|
||||||
|
|
||||||
if(that.haveSlide) return;
|
if(that.haveSlide) return;
|
||||||
|
|
||||||
@ -300,9 +314,9 @@ layui.define(['jquery', 'lay'], function(exports){
|
|||||||
|
|
||||||
// 回调返回的参数
|
// 回调返回的参数
|
||||||
var params = {
|
var params = {
|
||||||
index: options.index
|
index: options.index,
|
||||||
,prevIndex: thisIndex
|
prevIndex: thisIndex,
|
||||||
,item: elemItem.eq(options.index)
|
item: elemItem.eq(options.index)
|
||||||
};
|
};
|
||||||
|
|
||||||
typeof options.change === 'function' && options.change(params);
|
typeof options.change === 'function' && options.change(params);
|
||||||
@ -311,8 +325,8 @@ layui.define(['jquery', 'lay'], function(exports){
|
|||||||
|
|
||||||
// 事件处理
|
// 事件处理
|
||||||
Class.prototype.events = function(){
|
Class.prototype.events = function(){
|
||||||
var that = this
|
var that = this;
|
||||||
,options = that.config;
|
var options = that.config;
|
||||||
|
|
||||||
if(options.elem.data('haveEvents')) return;
|
if(options.elem.data('haveEvents')) return;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user