Merge branch 'master' of github.com:yutent/doui
commit
442707471b
|
@ -1,4 +1,6 @@
|
|||
*.min.js
|
||||
*.min.css
|
||||
index.html
|
||||
.vscode
|
||||
.vscode
|
||||
dist.sublime-project
|
||||
dist.sublime-workspace
|
File diff suppressed because it is too large
Load Diff
|
@ -5,233 +5,219 @@
|
|||
*
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
'use strict';
|
||||
|
||||
define(function(){
|
||||
define(function() {
|
||||
var _Promise = function(callback) {
|
||||
this.callback = [];
|
||||
var _this = this;
|
||||
|
||||
var _Promise = function(callback){
|
||||
this.callback = []
|
||||
var _this = this
|
||||
if (typeof this !== 'object')
|
||||
throw new TypeError('Promises must be constructed via new');
|
||||
|
||||
if(typeof this !== 'object')
|
||||
throw new TypeError('Promises must be constructed via new')
|
||||
if (typeof callback !== 'function')
|
||||
throw new TypeError('Argument must be a function');
|
||||
|
||||
if(typeof callback !== 'function')
|
||||
throw new TypeError('Argument must be a function')
|
||||
|
||||
callback(function(val){
|
||||
_resolve(_this, val)
|
||||
}, function(val){
|
||||
_reject(_this, val)
|
||||
})
|
||||
}
|
||||
callback(
|
||||
function(val) {
|
||||
_resolve(_this, val);
|
||||
},
|
||||
function(val) {
|
||||
_reject(_this, val);
|
||||
}
|
||||
);
|
||||
};
|
||||
var self = {
|
||||
_state: 1,
|
||||
_fired: 1,
|
||||
_val: 1,
|
||||
callback: 1
|
||||
}
|
||||
};
|
||||
|
||||
_Promise.prototype = {
|
||||
constructor: _Promise,
|
||||
_state: 'pending',
|
||||
_fired: false,
|
||||
_fire: function(yes, no){
|
||||
if(this._state === 'rejected'){
|
||||
if(typeof no === 'function')
|
||||
no(this._val)
|
||||
else
|
||||
throw this._val
|
||||
}else{
|
||||
if(typeof yes === 'function')
|
||||
yes(this._val)
|
||||
_fire: function(yes, no) {
|
||||
if (this._state === 'rejected') {
|
||||
if (typeof no === 'function') no(this._val);
|
||||
else throw this._val;
|
||||
} else {
|
||||
if (typeof yes === 'function') yes(this._val);
|
||||
}
|
||||
},
|
||||
_then: function(yes, no){
|
||||
if(this._fired){
|
||||
var _this = this
|
||||
fireCallback(_this, function(){
|
||||
_this._fire(yes, no)
|
||||
})
|
||||
}else{
|
||||
this.callback.push({yes: yes, no: no})
|
||||
_then: function(yes, no) {
|
||||
if (this._fired) {
|
||||
var _this = this;
|
||||
fireCallback(_this, function() {
|
||||
_this._fire(yes, no);
|
||||
});
|
||||
} else {
|
||||
this.callback.push({ yes: yes, no: no });
|
||||
}
|
||||
},
|
||||
then: function(yes, no){
|
||||
yes = typeof yes === 'function' ? yes : _yes
|
||||
no = typeof no === 'function' ? no : _no
|
||||
var _this = this
|
||||
var next = new _Promise(function(resolve, reject){
|
||||
|
||||
_this._then(function(val){
|
||||
try{
|
||||
val = yes(val)
|
||||
}catch(err){
|
||||
return reject(err)
|
||||
then: function(yes, no) {
|
||||
yes = typeof yes === 'function' ? yes : _yes;
|
||||
no = typeof no === 'function' ? no : _no;
|
||||
var _this = this;
|
||||
var next = new _Promise(function(resolve, reject) {
|
||||
_this._then(
|
||||
function(val) {
|
||||
try {
|
||||
val = yes(val);
|
||||
} catch (err) {
|
||||
return reject(err);
|
||||
}
|
||||
}, function(val){
|
||||
try{
|
||||
val = no(val)
|
||||
}catch(err){
|
||||
return reject(err)
|
||||
},
|
||||
function(val) {
|
||||
try {
|
||||
val = no(val);
|
||||
} catch (err) {
|
||||
return reject(err);
|
||||
}
|
||||
resolve(val)
|
||||
})
|
||||
})
|
||||
for(var i in _this){
|
||||
if(!self[i])
|
||||
next[i] = _this[i]
|
||||
resolve(val);
|
||||
}
|
||||
);
|
||||
});
|
||||
for (var i in _this) {
|
||||
if (!self[i]) next[i] = _this[i];
|
||||
}
|
||||
return next
|
||||
return next;
|
||||
},
|
||||
done: done,
|
||||
catch: fail,
|
||||
fail: fail
|
||||
};
|
||||
|
||||
_Promise.all = function(arr) {
|
||||
return _some(false, arr);
|
||||
};
|
||||
|
||||
_Promise.race = function(arr) {
|
||||
return _some(true, arr);
|
||||
};
|
||||
|
||||
_Promise.defer = defer;
|
||||
|
||||
// -----------------------------------------------------------
|
||||
|
||||
function _yes(val) {
|
||||
return val;
|
||||
}
|
||||
|
||||
_Promise.all = function(arr){
|
||||
return _some(false, arr)
|
||||
function _no(err) {
|
||||
throw err;
|
||||
}
|
||||
|
||||
_Promise.race = function(arr){
|
||||
return _some(true, arr)
|
||||
function done(callback) {
|
||||
return this.then(callback, _no);
|
||||
}
|
||||
|
||||
_Promise.defer = defer
|
||||
|
||||
// -----------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
function _yes(val){
|
||||
return val
|
||||
function fail(callback) {
|
||||
return this.then(_yes, callback);
|
||||
}
|
||||
|
||||
function _no(err){
|
||||
throw err
|
||||
function defer() {
|
||||
var obj = {};
|
||||
obj.promise = new this(function(yes, no) {
|
||||
obj.resolve = yes;
|
||||
obj.reject = no;
|
||||
});
|
||||
return obj;
|
||||
}
|
||||
|
||||
|
||||
function done(callback){
|
||||
return this.then(callback, _no)
|
||||
}
|
||||
|
||||
function fail(callback){
|
||||
return this.then(_yes, callback)
|
||||
}
|
||||
|
||||
function defer(){
|
||||
var obj = {}
|
||||
obj.promise = new this(function(yes, no){
|
||||
obj.resolve = yes
|
||||
obj.reject = no
|
||||
})
|
||||
return obj
|
||||
}
|
||||
|
||||
|
||||
//成功的回调
|
||||
function _resolve(obj, val){
|
||||
if(obj._state !== 'pending')
|
||||
return
|
||||
function _resolve(obj, val) {
|
||||
if (obj._state !== 'pending') return;
|
||||
|
||||
if(val && typeof val.then === 'function'){
|
||||
var method = val instanceof _Promise ? '_then' : 'then'
|
||||
val[method](function(v){
|
||||
_transmit(obj, v, true)
|
||||
}, function(v){
|
||||
_transmit(obj, v, false)
|
||||
})
|
||||
}else{
|
||||
_transmit(obj, val, true)
|
||||
if (val && typeof val.then === 'function') {
|
||||
var method = val instanceof _Promise ? '_then' : 'then';
|
||||
val[method](
|
||||
function(v) {
|
||||
_transmit(obj, v, true);
|
||||
},
|
||||
function(v) {
|
||||
_transmit(obj, v, false);
|
||||
}
|
||||
);
|
||||
} else {
|
||||
_transmit(obj, val, true);
|
||||
}
|
||||
}
|
||||
|
||||
//失败的回调
|
||||
function _reject(obj, val){
|
||||
if(obj._state !== 'pending')
|
||||
return
|
||||
function _reject(obj, val) {
|
||||
if (obj._state !== 'pending') return;
|
||||
|
||||
_transmit(obj, val, false)
|
||||
_transmit(obj, val, false);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 改变Promise的_fired值,并保持用户传参,触发所有回调
|
||||
function _transmit(obj, val, isResolved){
|
||||
obj._fired = true
|
||||
obj._val = val
|
||||
obj._state = isResolved ? 'fulfilled' : 'rejected'
|
||||
function _transmit(obj, val, isResolved) {
|
||||
obj._fired = true;
|
||||
obj._val = val;
|
||||
obj._state = isResolved ? 'fulfilled' : 'rejected';
|
||||
|
||||
fireCallback(obj, function(){
|
||||
for(var i in obj.callback){
|
||||
obj._fire(obj.callback[i].yes, obj.callback[i].no)
|
||||
fireCallback(obj, function() {
|
||||
for (var i in obj.callback) {
|
||||
obj._fire(obj.callback[i].yes, obj.callback[i].no);
|
||||
}
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
function fireCallback(obj, callback) {
|
||||
var isAsync = false;
|
||||
|
||||
function fireCallback(obj, callback){
|
||||
var isAsync = false
|
||||
if (typeof obj.async === 'boolean') isAsync = obj.async;
|
||||
else isAsync = obj.async = true;
|
||||
|
||||
if(typeof obj.async === 'boolean')
|
||||
isAsync = obj.async
|
||||
else
|
||||
isAsync = obj.async = true
|
||||
|
||||
if(isAsync)
|
||||
setTimeout(callback, 0)
|
||||
else
|
||||
callback()
|
||||
if (isAsync) setTimeout(callback, 0);
|
||||
else callback();
|
||||
}
|
||||
|
||||
function _some(bool, iterable) {
|
||||
iterable = Array.isArray(iterable) ? iterable : [];
|
||||
|
||||
function _some(bool, iterable){
|
||||
iterable = Array.isArray(iterable) ? iterable : []
|
||||
var n = 0;
|
||||
var res = [];
|
||||
var end = false;
|
||||
|
||||
var n = 0
|
||||
var res = []
|
||||
var end = false
|
||||
return new _Promise(function(yes, no) {
|
||||
if (!iterable.length) no(res);
|
||||
|
||||
return new _Promise(function(yes, no){
|
||||
if(!iterable.length)
|
||||
no(res)
|
||||
|
||||
function loop(obj, idx){
|
||||
obj.then(function(val){
|
||||
if(!end){
|
||||
res[idx] = val
|
||||
n++
|
||||
if(bool || n >= iterable.length){
|
||||
yes(bool ? val : res)
|
||||
end = true
|
||||
function loop(obj, idx) {
|
||||
obj.then(
|
||||
function(val) {
|
||||
if (!end) {
|
||||
res[idx] = val;
|
||||
n++;
|
||||
if (bool || n >= iterable.length) {
|
||||
yes(bool ? val : res);
|
||||
end = true;
|
||||
}
|
||||
}
|
||||
},
|
||||
function(val) {
|
||||
end = true;
|
||||
no(val);
|
||||
}
|
||||
}, function(val){
|
||||
end = true
|
||||
no(val)
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
for(var i = 0, len = iterable.length; i < len; i++){
|
||||
loop(iterable[i], i)
|
||||
for (var i = 0, len = iterable.length; i < len; i++) {
|
||||
loop(iterable[i], i);
|
||||
}
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
|
||||
// ---------------------------------------------------------------
|
||||
|
||||
|
||||
var nativePromise = window.Promise
|
||||
if(/native code/.test(nativePromise)){
|
||||
nativePromise.prototype.done = done
|
||||
nativePromise.prototype.fail = fail
|
||||
if(!nativePromise.defer)
|
||||
nativePromise.defer = defer
|
||||
var nativePromise = window.Promise;
|
||||
if (/native code/.test(nativePromise)) {
|
||||
nativePromise.prototype.done = done;
|
||||
nativePromise.prototype.fail = fail;
|
||||
if (!nativePromise.defer) nativePromise.defer = defer;
|
||||
}
|
||||
|
||||
return window.Promise = nativePromise || _Promise
|
||||
|
||||
|
||||
})
|
||||
return (window.Promise = nativePromise || _Promise);
|
||||
});
|
||||
|
|
|
@ -4,16 +4,16 @@
|
|||
|
||||
```json
|
||||
{
|
||||
sliderList: [{src: '', link: '', title: '', titleStyle: ''}], //src: 图片地址; link: 点击链接; title: 幻灯片标题(可以是文本或html); titleStyle: 标题样式
|
||||
sliderList: [{src: '', title: '', link: '', elm: ''}], //src: 图片地址; link: 点击链接; title: 幻灯片标题(可以是文本或html); elm: 幻灯片中的dom元素
|
||||
autoSlide: boolean, //true: 自动轮播; false: 停止轮播
|
||||
time: int, //轮播间隔时间
|
||||
preview: boolean //是否缩略有图
|
||||
skin: 'skin-2', //4种,默认0(0,1,2,3)
|
||||
time: int, //自动轮播间隔时间
|
||||
preview: boolean //是否缩略有图(不适用于全屏)
|
||||
skin: int, //4种,默认0(0,1,2,3)
|
||||
sliderType: int, //幻灯片动画效果,目前有1: 水平滑动;2: 水平渐进渐出;3: 垂直滑动;4: 垂直渐进渐出
|
||||
$onSuccess: function(vm){
|
||||
slider = vm
|
||||
}, //初始化回调
|
||||
vm.$setSliderList(list), //赋值数据给幻灯片数组
|
||||
vm.$setSliderType(type) //type改变幻灯片动画效果,目前有1: 滑动;2: 渐进渐出
|
||||
}
|
||||
|
||||
```
|
||||
|
@ -40,8 +40,10 @@ name属性可以设定组件的$id值,方便各模块之间进行通讯
|
|||
sliderList: [{src: '', link: '', title: '', elm: ''}],
|
||||
autoSlide: false,
|
||||
time: 0,
|
||||
preview: true
|
||||
skin: 'skin-2',
|
||||
// preview: true,
|
||||
fullScreen: true,
|
||||
skin: 1,
|
||||
sliderType: 4,
|
||||
$onSuccess: function(vm){
|
||||
slider = vm
|
||||
slider.$setSliderList(list)
|
||||
|
|
|
@ -1 +1 @@
|
|||
.do-sliders{position:relative;height:100%;width:100%}.do-sliders .slider-content{height:80%;position:relative}.do-sliders .slider-content .container{position:relative;height:100%;overflow:hidden}.do-sliders .slider-content .container .box{position:relative;height:100%;width:100%;transition:.4s}.do-sliders .slider-content .container .box a{position:relative;display:inline-block;height:100%;vertical-align:middle;transition:.4s}.do-sliders .slider-content .container .box a img{width:100%;height:100%;object-fit:cover}.do-sliders .slider-content .container .box a .title-class{position:absolute;width:30%;min-height:30px;line-height:30px;left:0;bottom:15%;right:0;margin:auto;text-align:center;font-size:25px}.do-sliders .slider-content .container .box a .elm{height:100%;width:100%;background:#333}.do-sliders .slider-content .container .box a .default-elm{width:100%;height:100%}.do-sliders .slider-content .container .box .fadeType{position:absolute;left:0;top:0;width:100%}.do-sliders .slider-content .slider-btn{position:absolute;top:50%;min-width:50px;min-height:50px;margin-top:-25px;text-decoration:none;font-size:30px;line-height:50px;text-align:center;border-radius:100%;color:rgba(255,255,255,0.6);font-weight:bold;z-index:1;transition:.4s}.do-sliders .slider-content .slider-btn:nth-of-type(1){margin-left:20px}.do-sliders .slider-content .slider-btn:nth-of-type(2){right:0;margin-right:20px}.do-sliders .slider-preview-btn{position:relative;bottom:-5%;height:15%;width:100%;margin:0 auto;text-align:center;overflow:hidden}.do-sliders .slider-preview-btn span{display:inline-block;width:10px;height:10px;margin:20px 5px;border-radius:100%;background:rgba(255,255,255,0.8);cursor:pointer;transition:.5s}.do-sliders .slider-preview-btn span:hover{background:#1abc9c}.do-sliders .slider-preview-btn .no-preview-act{background:#16a085}.do-sliders .slider-preview-btn .btn-group{height:100%}.do-sliders .slider-preview-btn .btn-img{display:inline-block;position:relative;width:80px;height:100%;margin:0 5px;transition:.4s;cursor:pointer}.do-sliders .slider-preview-btn .btn-img img{position:relative;width:100%;height:100%;object-fit:cover;transition:.4s;z-index:2}.do-sliders .slider-preview-btn .btn-img .preview-act{transform:scale(0.95)}.do-sliders .slider-preview-btn .btn-img .btn-background{content:'';position:absolute;left:0;top:0;width:100%;height:100%;opacity:0;transition:.8s;z-index:1}.do-sliders .slider-preview-btn .btn-img.act .btn-background{opacity:1}.do-sliders.skin-0 .title-class{color:#fff}.do-sliders.skin-1 .title-class{color:#c54133}.do-sliders.skin-2 .title-class{color:#16a085}.do-sliders.skin-3 .title-class{color:#2c81ba}.do-sliders.skin-0 .slider-btn{color:rgba(255,255,255,0.6)}.do-sliders.skin-1 .slider-btn{color:#c54133}.do-sliders.skin-2 .slider-btn{color:#16a085}.do-sliders.skin-3 .slider-btn{color:#2c81ba}.do-sliders.skin-0 .slider-btn:hover{color:#fff}.do-sliders.skin-1 .slider-btn:hover{color:#e74c3c}.do-sliders.skin-2 .slider-btn:hover{color:#1abc9c}.do-sliders.skin-3 .slider-btn:hover{color:#3498db}.do-sliders.skin-0 .btn-img .btn-background{background:rgba(0,0,0,0.5)}.do-sliders.skin-1 .btn-img .btn-background{background:#e74c3c}.do-sliders.skin-2 .btn-img .btn-background{background:#1abc9c}.do-sliders.skin-3 .btn-img .btn-background{background:#3498db}.do-sliders.skin-0 .default-elm{background:#fff}.do-sliders.skin-1 .default-elm{background:#e74c3c}.do-sliders.skin-2 .default-elm{background:#1abc9c}.do-sliders.skin-3 .default-elm{background:#3498db}.do-sliders .h-80{height:80%}.do-sliders .h-100{height:100%}@keyframes right-to-left{49%{-webkit-transform:translate(100%)}50%{-webkit-transform:translate(-100%);opacity:0}100%{opacity:1}}@keyframes left-to-right{49%{-webkit-transform:translate(-100%)}50%{-webkit-transform:translate(100%);opacity:0}100%{opacity:1}}
|
||||
.do-sliders{position:relative;height:100%;width:100%}.do-sliders .skin{height:100%}.do-sliders.fullscreen{position:absolute;width:100%;height:100%;left:0;top:0}.do-sliders .slider-content{position:relative}.do-sliders .slider-content .container{position:relative;height:100%;overflow:hidden}.do-sliders .slider-content .container .box{position:relative;height:100%;width:100%;transition:.4s}.do-sliders .slider-content .container .box .page{position:relative;display:inline-block;height:100%;vertical-align:middle}.do-sliders .slider-content .container .box .page img{width:100%;height:100%;object-fit:cover}.do-sliders .slider-content .container .box .page .title-class{position:absolute;width:30%;min-height:30px;line-height:30px;left:0;bottom:15%;right:0;margin:auto;text-align:center;font-size:25px}.do-sliders .slider-content .container .box .page .elm{height:100%;width:100%;background:#333}.do-sliders .slider-content .container .box .page .default-elm{width:100%;height:100%}.do-sliders .slider-content .container .box .page .default-btn{width:100%;height:100%}.do-sliders .slider-content .container .box .fadeType{position:absolute;left:0;top:0;width:100%;transition:.4s}.do-sliders .slider-content .slider-btn{position:absolute;top:50%;min-width:50px;min-height:50px;margin-top:-25px;text-decoration:none;font-size:30px;line-height:50px;text-align:center;border-radius:100%;color:rgba(255,255,255,0.6);font-weight:bold;z-index:1;transition:.4s}.do-sliders .slider-content .slider-btn:nth-of-type(1){margin-left:20px}.do-sliders .slider-content .slider-btn:nth-of-type(2){right:0;margin-right:20px}.do-sliders .slider-preview-btn{position:absolute;bottom:2%;height:12%;width:100%;margin:0 auto;text-align:center;overflow:hidden}.do-sliders .slider-preview-btn span{display:inline-block;width:10px;height:10px;margin:0 5px;border-radius:100%;background:rgba(255,255,255,0.8);cursor:pointer;transition:.5s}.do-sliders .slider-preview-btn span:hover{background:#4caf50}.do-sliders .slider-preview-btn .no-preview-act{background:#388e3c}.do-sliders .slider-preview-btn .btn-group{height:100%}.do-sliders .slider-preview-btn .btn-img{display:inline-block;position:relative;width:80px;height:100%;margin:0 5px;transition:.4s;cursor:pointer}.do-sliders .slider-preview-btn .btn-img img{position:relative;width:100%;height:100%;object-fit:cover;transition:.4s;z-index:2}.do-sliders .slider-preview-btn .btn-img .preview-act{transform:scale(0.95)}.do-sliders .slider-preview-btn .btn-img:after{content:'';position:absolute;left:0;top:0;width:100%;height:100%;opacity:0;transition:.8s;z-index:1}.do-sliders .slider-preview-btn .btn-img.act:after{opacity:1}.do-sliders .slider-preview-btn-vertical{right:10px;bottom:50%;width:20px;height:auto;text-align:center;transform:translate(0, 50%)}.do-sliders .skin-0 .title-class{color:#e0e0e0}.do-sliders .skin-1 .title-class{color:#e64a19}.do-sliders .skin-2 .title-class{color:#388e3c}.do-sliders .skin-3 .title-class{color:#1976d2}.do-sliders .skin-0 .slider-btn{color:rgba(255,255,255,0.6)}.do-sliders .skin-1 .slider-btn{color:#e64a19}.do-sliders .skin-2 .slider-btn{color:#388e3c}.do-sliders .skin-3 .slider-btn{color:#1976d2}.do-sliders .skin-0 .slider-btn:hover{color:#e0e0e0}.do-sliders .skin-1 .slider-btn:hover{color:#ff5722}.do-sliders .skin-2 .slider-btn:hover{color:#4caf50}.do-sliders .skin-3 .slider-btn:hover{color:#2196f3}.do-sliders .skin-0 .btn-img:after{background:rgba(0,0,0,0.5)}.do-sliders .skin-1 .btn-img:after{background:#ff5722}.do-sliders .skin-2 .btn-img:after{background:#4caf50}.do-sliders .skin-3 .btn-img:after{background:#2196f3}.do-sliders .skin-0 .default-elm{background:#e0e0e0}.do-sliders .skin-1 .default-elm{background:#ff5722}.do-sliders .skin-2 .default-elm{background:#4caf50}.do-sliders .skin-3 .default-elm{background:#2196f3}.do-sliders .skin-0 .default-btn{background:#e0e0e0}.do-sliders .skin-1 .default-btn{background:#ff5722}.do-sliders .skin-2 .default-btn{background:#4caf50}.do-sliders .skin-3 .default-btn{background:#2196f3}.do-sliders .skin-0 .no-preview-act{background:rgba(0,0,0,0.6)}.do-sliders .skin-1 .no-preview-act{background:#e64a19}.do-sliders .skin-2 .no-preview-act{background:#388e3c}.do-sliders .skin-3 .no-preview-act{background:#1976d2}.do-sliders .skin-0 .slider-preview-btn span:hover{background:rgba(0,0,0,0.6)}.do-sliders .skin-1 .slider-preview-btn span:hover{background:#e64a19}.do-sliders .skin-2 .slider-preview-btn span:hover{background:#388e3c}.do-sliders .skin-3 .slider-preview-btn span:hover{background:#1976d2}.do-sliders .h-83{height:83%}.do-sliders .h-100{height:100%}@keyframes right-to-left{49%{-webkit-transform:translate(100%)}50%{-webkit-transform:translate(-100%);opacity:0}100%{opacity:1}}@keyframes left-to-right{49%{-webkit-transform:translate(-100%)}50%{-webkit-transform:translate(100%);opacity:0}100%{opacity:1}}
|
||||
|
|
|
@ -1,64 +1,95 @@
|
|||
<div class="do-sliders" :class="{{skin}}">
|
||||
12
|
||||
<div class="slider-content" :class="{'h-100': !preview}" :class="{'h-80': preview}" :if="sliderList.length" :mouseenter="$stopSlide()" :mouseleave="$startSlide()">
|
||||
<a class="do-ui-font slider-btn" href="javascript:;"
|
||||
:click="$go(-1)"></a>
|
||||
<div class="do-sliders" :class="{fullscreen: fullScreen}">
|
||||
<div class="skin" :class="{{skin}}">
|
||||
|
||||
<div class="container">
|
||||
<div class="box"
|
||||
:if="sliderType == 1"
|
||||
:css="{width: sliderList.length * 100 + '%', transform: animation}">
|
||||
<a target="_blank"
|
||||
:repeat="sliderList"
|
||||
:css="{width: currWidth}"
|
||||
:attr="{href: el.link || 'javascript:;'}">
|
||||
<img :if="el.src && el.src != ''" :attr-src="el.src">
|
||||
<div class="default-elm" :class="{elm: !el.elm && !el.src, 'preview-act': curr === $index || (curr >= maxNum && $index == maxNum - 1)}" :if="!el.src" :html="el.elm ? el.elm : ''"></div>
|
||||
<p :if="el.title"
|
||||
:html="el.title"
|
||||
class="title-class"></p>
|
||||
</a>
|
||||
</div>
|
||||
<div class="box"
|
||||
:if="sliderType == 2">
|
||||
<a target="_blank"
|
||||
class="fadeType"
|
||||
:repeat="sliderList"
|
||||
:css="{opacity: curr != $index ? 0 : 1}"
|
||||
:attr="{href: el.link || 'javascript:;'}">
|
||||
<img :if="el.src && el.src != ''" :attr-src="el.src">
|
||||
<div class="default-elm" :class="{elm: !el.elm && !el.src, 'preview-act': curr === $index || (curr >= maxNum && $index == maxNum - 1)}" :if="!el.src" :html="el.elm ? el.elm : ''"></div>
|
||||
<p :if="el.title"
|
||||
:html="el.title"
|
||||
class="title-class"></p>
|
||||
</a>
|
||||
<div class="slider-content" :class="{'h-83': preview && !fullScreen, 'h-100': !preview || fullScreen}" :if="sliderList.length" :mouseenter="$stopSlide()" :mouseleave="$startSlide()">
|
||||
<a class="do-ui-font slider-btn" href="javascript:;"
|
||||
:if="sliderType < 3"
|
||||
:click="$go(-1)"></a>
|
||||
|
||||
<div class="container">
|
||||
<div class="box"
|
||||
:if="sliderType == 1"
|
||||
:css="{width: sliderList.length * 100 + '%', transform: animation}">
|
||||
<a class="page" target="_blank"
|
||||
:repeat="sliderList"
|
||||
:css="{width: currWidth + '%'}"
|
||||
:attr="{href: el.link || 'javascript:;'}">
|
||||
<img :if="el.src && el.src != ''" :attr-src="el.src">
|
||||
<p :if="el.title"
|
||||
:html="el.title"
|
||||
class="title-class"></p>
|
||||
</a>
|
||||
</div>
|
||||
<div class="box"
|
||||
:if="sliderType == 2">
|
||||
<a target="_blank"
|
||||
class="page fadeType"
|
||||
:repeat="sliderList"
|
||||
:css="{opacity: curr != $index ? 0 : 1}"
|
||||
:attr="{href: el.link || 'javascript:;'}">
|
||||
<img :if="el.src && el.src != ''" :attr-src="el.src">
|
||||
|
||||
<p :if="el.title"
|
||||
:html="el.title"
|
||||
class="title-class"></p>
|
||||
</a>
|
||||
</div>
|
||||
<div class="box"
|
||||
:if="sliderType == 3"
|
||||
:css="{height: sliderList.length * 100 + '%', transform: animation}">
|
||||
<a class="page" target="_blank"
|
||||
:repeat="sliderList"
|
||||
:css="{width: '100%', height: (100 / sliderList.length) + '%'}"
|
||||
:attr="{href: el.link || 'javascript:;'}">
|
||||
<img :if="el.src && el.src != ''" :attr-src="el.src">
|
||||
<p :if="el.title"
|
||||
:html="el.title"
|
||||
class="title-class"></p>
|
||||
</a>
|
||||
</div>
|
||||
<div class="box"
|
||||
:if="sliderType == 4">
|
||||
<a target="_blank"
|
||||
class="page fadeType"
|
||||
:repeat="sliderList"
|
||||
:css="{opacity: curr != $index ? 0 : 1}"
|
||||
:attr="{href: el.link || 'javascript:;'}">
|
||||
<img :if="el.src && el.src != ''" :attr-src="el.src">
|
||||
{{el.elm | html}}
|
||||
<p :if="el.title"
|
||||
:html="el.title"
|
||||
class="title-class"></p>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<a class="do-ui-font slider-btn" href="javascript:;"
|
||||
:if="sliderType < 3"
|
||||
:click="$go(1)"></a>
|
||||
</div>
|
||||
|
||||
<a class="do-ui-font slider-btn" href="javascript:;"
|
||||
:click="$go(1)"></a>
|
||||
</div>
|
||||
|
||||
<div class="slider-preview-btn"
|
||||
:class="{'slider-preview-btn-vertical': sliderType > 2}"
|
||||
:css="{padding: !preview && sliderType < 3 ? '2%' : ''}" >
|
||||
<span href="javascript:;"
|
||||
:if="!preview || fullScreen"
|
||||
:class="{'no-preview-act': curr === $index}"
|
||||
:repeat="sliderList"
|
||||
:click="$jump($index)">
|
||||
</span>
|
||||
|
||||
<div class="slider-preview-btn"
|
||||
:css="{bottom: preview ? '-5%' : '15%'}" >
|
||||
<span :if="!preview"
|
||||
href="javascript:;"
|
||||
:class="{'no-preview-act': curr === $index}"
|
||||
:repeat="sliderList"
|
||||
:click="$jump($index)">
|
||||
</span>
|
||||
|
||||
<a class="btn-img" href="javascript:;"
|
||||
:if="preview"
|
||||
:class="{act: curr === $index || (curr >= maxNum && $index == maxNum - 1)}"
|
||||
:click="$jump($index)"
|
||||
:repeat="sliderBtnList">
|
||||
<img
|
||||
:class="{'preview-act': curr === $index || (curr >= maxNum && $index == maxNum - 1)}"
|
||||
:if="el.src && el.src != ''"
|
||||
:attr-src="el.src" />
|
||||
<div class="btn-background"></div>
|
||||
</a>
|
||||
<a class="btn-img" href="javascript:;"
|
||||
:if="preview && !fullScreen"
|
||||
:class="{act: curr === $index || (curr >= maxNum && $index == maxNum - 1), 'default-btn': !el.src}"
|
||||
:click="$jump($index)"
|
||||
:repeat="sliderBtnList">
|
||||
<img
|
||||
:class="{'preview-act': curr === $index || (curr >= maxNum && $index == maxNum - 1)}"
|
||||
:if="el.src && el.src != ''"
|
||||
:attr-src="el.src" />
|
||||
<div class="btn-background" ms-if="el.src"></div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -7,16 +7,19 @@
|
|||
define(["yua", "text!./main.htm", "css!./main"], function(yua, tpl){
|
||||
|
||||
var dom;
|
||||
function getWidth(){}
|
||||
var sliderNum = 0;
|
||||
var skin = ['skin-0','skin-1','skin-2','skin-3']
|
||||
|
||||
/**
|
||||
* [根据当前幻灯片索引获取填充底下按钮数据]
|
||||
* @param {Object} vm [vm对象]
|
||||
* @return {[Array]} [填充到按钮的数据]
|
||||
*/
|
||||
function getBtnList(vm){
|
||||
var currWidth = vm.currWidth.slice(0, -2)
|
||||
vm.maxNum = Math.floor(currWidth / 130)
|
||||
function getBtnList(vm, el){
|
||||
if(el){
|
||||
dom = el
|
||||
}
|
||||
vm.maxNum = Math.floor(dom.offsetWidth / 90)
|
||||
var curr = vm.curr + 1
|
||||
let res = []
|
||||
if(!vm.preview)
|
||||
|
@ -43,7 +46,7 @@ define(["yua", "text!./main.htm", "css!./main"], function(yua, tpl){
|
|||
vm.timer = setTimeout(function(){
|
||||
vm.$go(1)
|
||||
autoSlide(vm)
|
||||
}, vm.time)
|
||||
}, vm.time <= 0 ? 3000 : vm.time)
|
||||
}
|
||||
|
||||
return yua.component("sliders", {
|
||||
|
@ -84,60 +87,53 @@ define(["yua", "text!./main.htm", "css!./main"], function(yua, tpl){
|
|||
vm.sliderList.pushArray(list)
|
||||
}
|
||||
|
||||
vm.$setSliderType = function(type){
|
||||
vm.sliderType = type
|
||||
yua.log(vm.sliderType)
|
||||
}
|
||||
|
||||
vm.$watch('curr', function(val, old) {
|
||||
vm.currWidth = getWidth()
|
||||
var width
|
||||
if(vm.currWidth.indexOf('px') > -1)
|
||||
width = vm.currWidth.slice(0, vm.currWidth.indexOf('px'))
|
||||
|
||||
vm.animation = 'translate(' + (-width * val) + 'px, 0)'
|
||||
if(vm.preview && vm.maxNum < vm.sliderList.length){
|
||||
vm.sliderBtnList.removeAll()
|
||||
vm.sliderBtnList.pushArray(getBtnList(vm))
|
||||
}
|
||||
})
|
||||
|
||||
window.addEventListener('resize', function(){
|
||||
vm.currWidth = getWidth()
|
||||
var width
|
||||
if(vm.currWidth.indexOf('px') > -1)
|
||||
width = vm.currWidth.slice(0, vm.currWidth.indexOf('px'))
|
||||
|
||||
vm.animation = 'translate(' + (-width * vm.curr) + 'px, 0)'
|
||||
if(vm.preview && vm.maxNum < vm.sliderList.length){
|
||||
yua.log(vm.maxNum , vm.sliderList.length)
|
||||
vm.sliderBtnList.removeAll()
|
||||
vm.sliderBtnList.pushArray(getBtnList(vm))
|
||||
}
|
||||
}, false)
|
||||
|
||||
vm.$onSuccess(vm)
|
||||
},
|
||||
$ready: function(vm){
|
||||
dom = document.querySelector('.do-sliders')
|
||||
|
||||
/**
|
||||
* [获取当前幻灯片元素宽度]
|
||||
*/
|
||||
getWidth = function(){
|
||||
|
||||
return window.getComputedStyle ? window.getComputedStyle(dom).width : dom.offsetWidth + 'px'
|
||||
}
|
||||
|
||||
vm.currWidth = getWidth()
|
||||
$ready: function(vm, el){
|
||||
vm.skin = skin[vm.skin]
|
||||
vm.currWidth = (100 / vm.sliderList.length)
|
||||
if(vm.autoSlide)
|
||||
autoSlide(vm)
|
||||
|
||||
if(vm.preview){
|
||||
vm.sliderBtnList.removeAll()
|
||||
vm.sliderBtnList.pushArray(getBtnList(vm))
|
||||
vm.sliderBtnList.pushArray(getBtnList(vm, el))
|
||||
}
|
||||
|
||||
vm.$watch('curr', function(val, old) {
|
||||
|
||||
vm.animation = vm.sliderType > 2 ? 'translate(0, ' + (-vm.currWidth * val) + '%)' : 'translate(' + (-vm.currWidth * val) + '%, 0)'
|
||||
if(vm.preview && vm.maxNum < vm.sliderList.length){
|
||||
vm.sliderBtnList.removeAll()
|
||||
vm.sliderBtnList.pushArray(getBtnList(vm, el))
|
||||
}
|
||||
})
|
||||
|
||||
window.addEventListener('resize', function(){
|
||||
|
||||
vm.animation = vm.sliderType > 2 ? 'translate(0, ' + (-vm.currWidth * vm.curr) + '%)' : 'translate(' + (-vm.currWidth * vm.curr) + '%, 0)'
|
||||
if(vm.preview && vm.maxNum < vm.sliderList.length){
|
||||
vm.sliderBtnList.removeAll()
|
||||
vm.sliderBtnList.pushArray(getBtnList(vm, el))
|
||||
}
|
||||
}, false)
|
||||
|
||||
if(vm.sliderType >= 3){
|
||||
var now = 0
|
||||
var mouseWheelEv = /Firefox/i.test(navigator.userAgent) ? "DOMMouseScroll": "mousewheel"
|
||||
var direction = /Firefox/i.test(navigator.userAgent) ? "detail": "deltaY"
|
||||
window.addEventListener(mouseWheelEv, function(ev){
|
||||
if(Date.now() - now > 500 || now == 0){
|
||||
|
||||
if(ev[direction] > 0){
|
||||
vm.$go(1)
|
||||
}else{
|
||||
vm.$go(-1)
|
||||
}
|
||||
now = Date.now()
|
||||
}
|
||||
}, false)
|
||||
}
|
||||
yua.log(vm)
|
||||
},
|
||||
currWidth: 0,
|
||||
animation: '',
|
||||
|
@ -150,12 +146,12 @@ define(["yua", "text!./main.htm", "css!./main"], function(yua, tpl){
|
|||
sliderList: [],
|
||||
autoSlide: '',
|
||||
time: 3000,
|
||||
preview: true,
|
||||
skin: 'skin-0',
|
||||
preview: false,
|
||||
skin: 0,
|
||||
fullScreen: false,
|
||||
|
||||
$onSuccess: yua.noop,
|
||||
$setSliderList: yua.noop,
|
||||
$setSliderType: yua.noop,
|
||||
$jump: yua.noop,
|
||||
$stopSlide: yua.noop,
|
||||
$startSlide: yua.noop,
|
||||
|
|
|
@ -10,17 +10,20 @@
|
|||
// @import "../../../css/reset.scss";
|
||||
|
||||
.do-sliders {position: relative;height: 100%;width: 100%;
|
||||
.slider-content{height: 80%;position: relative;
|
||||
.skin{height: 100%}
|
||||
&.fullscreen{position: absolute;width: 100%;height: 100%;left: 0;top: 0;}
|
||||
.slider-content{position: relative;
|
||||
|
||||
.container {position: relative;height: 100%;overflow: hidden;
|
||||
.box {position: relative;height: 100%;width: 100%;transition: .4s;
|
||||
a {position:relative;display: inline-block;height: 100%;vertical-align: middle;transition: .4s;
|
||||
.page {position:relative;display: inline-block;height: 100%;vertical-align: middle;
|
||||
img {width: 100%;height: 100%;object-fit: cover;}
|
||||
.title-class {position: absolute;width: 30%;min-height: 30px;line-height: 30px;left: 0;bottom: 15%;right: 0;margin: auto;text-align: center;font-size: 25px;}
|
||||
.elm{height: 100%;width: 100%;background: #333;}
|
||||
.default-elm{width: 100%;height: 100%;}
|
||||
.default-btn{width: 100%;height: 100%;}
|
||||
}
|
||||
.fadeType{position: absolute;left: 0;top: 0;width: 100%;}
|
||||
.fadeType{position: absolute;left: 0;top: 0;width: 100%;transition: .4s;}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -32,10 +35,9 @@
|
|||
// .slider-btn:nth-of-type(2):hover{animation: right-to-left .3s;}
|
||||
}
|
||||
|
||||
.slider-preview-btn {position: absolute;bottom: 2%;height: 12%;width: 100%;margin: 0 auto;text-align: center;overflow: hidden;
|
||||
|
||||
.slider-preview-btn {position: relative;bottom: -5%;height: 15%;width: 100%;margin: 0 auto;text-align: center;overflow: hidden;
|
||||
|
||||
span {display: inline-block;width: 10px;height: 10px;margin: 20px 5px;border-radius: 100%;background: rgba(255,255,255,0.8);cursor: pointer;transition: .5s;}
|
||||
span {display: inline-block;width: 10px;height: 10px;margin: 0 5px;border-radius: 100%;background: rgba(255,255,255,0.8);cursor: pointer;transition: .5s;}
|
||||
span:hover{background:nth($cg, 1);}
|
||||
.no-preview-act{background:nth($cg, 3);}
|
||||
|
||||
|
@ -45,36 +47,52 @@
|
|||
img {position: relative;width: 100%;height: 100%;object-fit: cover;transition: .4s;z-index: 2;}
|
||||
.preview-act{transform: scale(.95)}
|
||||
}
|
||||
.btn-img .btn-background {content: '';position: absolute;left: 0;top: 0;width: 100%;height: 100%;opacity: 0;transition: .8s;z-index: 1;}
|
||||
.btn-img.act .btn-background {opacity: 1;}
|
||||
.btn-img:after {content: '';position: absolute;left: 0;top: 0;width: 100%;height: 100%;opacity: 0;transition: .8s;z-index: 1;}
|
||||
.btn-img.act:after {opacity: 1;}
|
||||
}
|
||||
.slider-preview-btn-vertical{right: 10px;bottom: 50%;width: 20px;height: auto;text-align: center;transform: translate(0, 50%);}
|
||||
|
||||
&.skin-0 .title-class{color: #fff}
|
||||
&.skin-1 .title-class{color: nth($cr, 3)}
|
||||
&.skin-2 .title-class{color: nth($cg, 3)}
|
||||
&.skin-3 .title-class{color: nth($cb, 3)}
|
||||
.skin-0 .title-class{color: #e0e0e0}
|
||||
.skin-1 .title-class{color: nth($cr, 3)}
|
||||
.skin-2 .title-class{color: nth($cg, 3)}
|
||||
.skin-3 .title-class{color: nth($cb, 3)}
|
||||
|
||||
&.skin-0 .slider-btn{color: rgba(255,255,255,.6)}
|
||||
&.skin-1 .slider-btn{color: nth($cr, 3)}
|
||||
&.skin-2 .slider-btn{color: nth($cg, 3)}
|
||||
&.skin-3 .slider-btn{color: nth($cb, 3)}
|
||||
.skin-0 .slider-btn{color: rgba(255,255,255,.6)}
|
||||
.skin-1 .slider-btn{color: nth($cr, 3)}
|
||||
.skin-2 .slider-btn{color: nth($cg, 3)}
|
||||
.skin-3 .slider-btn{color: nth($cb, 3)}
|
||||
|
||||
&.skin-0 .slider-btn:hover{color: #fff}
|
||||
&.skin-1 .slider-btn:hover{color: nth($cr, 1)}
|
||||
&.skin-2 .slider-btn:hover{color: nth($cg, 1)}
|
||||
&.skin-3 .slider-btn:hover{color: nth($cb, 1)}
|
||||
.skin-0 .slider-btn:hover{color: #e0e0e0}
|
||||
.skin-1 .slider-btn:hover{color: nth($cr, 1)}
|
||||
.skin-2 .slider-btn:hover{color: nth($cg, 1)}
|
||||
.skin-3 .slider-btn:hover{color: nth($cb, 1)}
|
||||
|
||||
&.skin-0 .btn-img .btn-background{background: rgba(0,0,0,0.5)}
|
||||
&.skin-1 .btn-img .btn-background{background: nth($cr, 1)}
|
||||
&.skin-2 .btn-img .btn-background{background: nth($cg, 1)}
|
||||
&.skin-3 .btn-img .btn-background{background: nth($cb, 1)}
|
||||
.skin-0 .btn-img:after{background: rgba(0,0,0,0.5)}
|
||||
.skin-1 .btn-img:after{background: nth($cr, 1)}
|
||||
.skin-2 .btn-img:after{background: nth($cg, 1)}
|
||||
.skin-3 .btn-img:after{background: nth($cb, 1)}
|
||||
|
||||
&.skin-0 .default-elm{background: #fff}
|
||||
&.skin-1 .default-elm{background: nth($cr, 1)}
|
||||
&.skin-2 .default-elm{background: nth($cg, 1)}
|
||||
&.skin-3 .default-elm{background: nth($cb, 1)}
|
||||
.skin-0 .default-elm{background: #e0e0e0}
|
||||
.skin-1 .default-elm{background: nth($cr, 1)}
|
||||
.skin-2 .default-elm{background: nth($cg, 1)}
|
||||
.skin-3 .default-elm{background: nth($cb, 1)}
|
||||
|
||||
.h-80{height: 80%;}
|
||||
.skin-0 .default-btn{background: #e0e0e0}
|
||||
.skin-1 .default-btn{background: nth($cr, 1)}
|
||||
.skin-2 .default-btn{background: nth($cg, 1)}
|
||||
.skin-3 .default-btn{background: nth($cb, 1)}
|
||||
|
||||
.skin-0 .no-preview-act{background: rgba(0,0,0,.6)}
|
||||
.skin-1 .no-preview-act{background: nth($cr, 3)}
|
||||
.skin-2 .no-preview-act{background: nth($cg, 3)}
|
||||
.skin-3 .no-preview-act{background: nth($cb, 3)}
|
||||
|
||||
.skin-0 .slider-preview-btn span:hover{background: rgba(0,0,0,.6)}
|
||||
.skin-1 .slider-preview-btn span:hover{background: nth($cr, 3)}
|
||||
.skin-2 .slider-preview-btn span:hover{background: nth($cg, 3)}
|
||||
.skin-3 .slider-preview-btn span:hover{background: nth($cb, 3)}
|
||||
|
||||
.h-83{height: 83%;}
|
||||
.h-100{height: 100%;}
|
||||
}
|
||||
|
||||
|
|
Reference in New Issue