Merge branch 'master' of github.com:yutent/doui
commit
c60cb14576
|
@ -1,57 +0,0 @@
|
|||
# 幻灯片组件文档
|
||||
|
||||
## 配置说明
|
||||
|
||||
```json
|
||||
{
|
||||
sliderList: [{src: '', title: '', link: '', elm: ''}], //src: 图片地址; link: 点击链接; title: 幻灯片标题(可以是文本或html); elm: 幻灯片中的dom元素
|
||||
autoSlide: boolean, //true: 自动轮播; false: 停止轮播
|
||||
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), //赋值数据给幻灯片数组
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
|
||||
## 用法
|
||||
|
||||
```html
|
||||
<div class="slider" :controller="test">
|
||||
<template name="sliders" config="sliderOpts"></template>
|
||||
</div>
|
||||
<!--
|
||||
其中config属性是指定分页组件的配置,会自动从上一层controller里找;
|
||||
其他的属性(除$id, config, id, class, tabindex, style, ms-*属性,data-*属性外,也可以用以配置组件,且优先级最高);
|
||||
name属性可以设定组件的$id值,方便各模块之间进行通讯
|
||||
-->
|
||||
<!-- 引入幻灯片组件 -->
|
||||
<script src="//dist.doui.cc/js/yua.js"></script>
|
||||
<script>
|
||||
require(['//dist.doui.cc/js/lib/sliders/main.js'],function(){
|
||||
var vm = yua({
|
||||
$id: "test",
|
||||
sliderOpts: {
|
||||
sliderList: [{src: '', link: '', title: '', elm: ''}],
|
||||
autoSlide: false,
|
||||
time: 0,
|
||||
// preview: true,
|
||||
fullScreen: true,
|
||||
skin: 1,
|
||||
sliderType: 4,
|
||||
$onSuccess: function(vm){
|
||||
slider = vm
|
||||
slider.$setSliderList(list)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
yua.scan()
|
||||
})
|
||||
</script>
|
||||
```
|
|
@ -0,0 +1,22 @@
|
|||
<template>
|
||||
<label></label>
|
||||
</template>
|
||||
|
||||
<style lang="scss">
|
||||
:host {
|
||||
display: flex;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script>
|
||||
export default class Slider {
|
||||
props = {
|
||||
value: 0,
|
||||
max: 100
|
||||
}
|
||||
|
||||
__init__() {
|
||||
/* render */
|
||||
}
|
||||
}
|
||||
</script>
|
|
@ -1,95 +0,0 @@
|
|||
<div class="do-sliders" :class="{fullscreen: fullScreen}">
|
||||
<div class="skin" :class="{{skin}}">
|
||||
|
||||
<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>
|
||||
|
||||
|
||||
<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>
|
||||
|
||||
<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>
|
|
@ -1,163 +0,0 @@
|
|||
/**
|
||||
*
|
||||
* @authors linteng (875482941@qq.com)
|
||||
* @date 2017-09-07 19:53:18
|
||||
*/
|
||||
|
||||
define(["yua", "text!./main.htm", "css!./main"], function(yua, tpl){
|
||||
|
||||
var dom;
|
||||
var sliderNum = 0;
|
||||
var skin = ['skin-0','skin-1','skin-2','skin-3']
|
||||
|
||||
/**
|
||||
* [根据当前幻灯片索引获取填充底下按钮数据]
|
||||
* @param {Object} vm [vm对象]
|
||||
* @return {[Array]} [填充到按钮的数据]
|
||||
*/
|
||||
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)
|
||||
res = vm.sliderList
|
||||
|
||||
if(vm.maxNum >= vm.sliderList.length){
|
||||
res = vm.sliderList
|
||||
}else{
|
||||
if(curr > vm.maxNum){
|
||||
res = vm.sliderList.slice(curr - vm.maxNum, curr)
|
||||
}else if(curr <= vm.maxNum){
|
||||
res = vm.sliderList.slice(0, vm.maxNum)
|
||||
}
|
||||
}
|
||||
return res
|
||||
}
|
||||
|
||||
/**
|
||||
* [设置自动轮播]
|
||||
* @param {[type]} vm [description]
|
||||
* @return {[type]} [description]
|
||||
*/
|
||||
function autoSlide(vm){
|
||||
vm.timer = setTimeout(function(){
|
||||
vm.$go(1)
|
||||
autoSlide(vm)
|
||||
}, vm.time <= 0 ? 3000 : vm.time)
|
||||
}
|
||||
|
||||
return yua.component("sliders", {
|
||||
$template: tpl,
|
||||
$init: function(vm){
|
||||
vm.$go = function(num){
|
||||
vm.curr += num
|
||||
if(vm.curr < 0){
|
||||
vm.curr = vm.sliderList.length - 1
|
||||
}else if(vm.curr > vm.sliderList.length - 1){
|
||||
vm.curr = 0
|
||||
}
|
||||
}
|
||||
|
||||
vm.$jump = function(i){
|
||||
var curr = vm.curr + 1
|
||||
if(curr > vm.maxNum && vm.preview){
|
||||
var distance = vm.maxNum - (i + 1)
|
||||
vm.curr -= distance
|
||||
}else{
|
||||
vm.curr = i
|
||||
}
|
||||
}
|
||||
|
||||
vm.$stopSlide = function(){
|
||||
if(vm.autoSlide){
|
||||
clearTimeout(vm.timer)
|
||||
}
|
||||
}
|
||||
|
||||
vm.$startSlide = function(){
|
||||
if(vm.autoSlide)
|
||||
autoSlide(vm)
|
||||
}
|
||||
|
||||
vm.$setSliderList = function(list){
|
||||
vm.sliderBtnList.removeAll()
|
||||
vm.sliderList.pushArray(list)
|
||||
}
|
||||
|
||||
vm.$onSuccess(vm)
|
||||
},
|
||||
$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, 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)
|
||||
}
|
||||
},
|
||||
currWidth: 0,
|
||||
animation: '',
|
||||
curr: 0,
|
||||
sliderBtnList: [],
|
||||
maxNum: 0,
|
||||
timer: yua.noop,
|
||||
sliderType: 1,
|
||||
|
||||
sliderList: [],
|
||||
autoSlide: '',
|
||||
time: 3000,
|
||||
preview: false,
|
||||
skin: 0,
|
||||
fullScreen: false,
|
||||
|
||||
$onSuccess: yua.noop,
|
||||
$setSliderList: yua.noop,
|
||||
$jump: yua.noop,
|
||||
$stopSlide: yua.noop,
|
||||
$startSlide: yua.noop,
|
||||
$go: yua.noop,
|
||||
})
|
||||
|
||||
yua.scan(dom)
|
||||
|
||||
})
|
Reference in New Issue