diff --git a/CHANGE.md b/CHANGE.md index a03f293..70016e2 100644 --- a/CHANGE.md +++ b/CHANGE.md @@ -19,4 +19,6 @@ class 改为了 className ### Upload 父级不能 computed Upload 的 fileList 了 ### Collapse -废弃 activeKey,使用 v-model,key 是保留的,更名为 name \ No newline at end of file +废弃 activeKey,使用 v-model,key 是保留的,更名为 name +### Carousel +废弃 activeIndex,使用 v-model,v-for="n in slides.length",Vue2的数字循环,是从1开始的 \ No newline at end of file diff --git a/README.md b/README.md index eea0dc9..ead257b 100644 --- a/README.md +++ b/README.md @@ -42,12 +42,12 @@ - [ ] Modal - [x] Progress - [x] Badge -- [ ] Collapse +- [x] Collapse - [x] Timeline - [x] Tag - [ ] Tooltip - [ ] Poptip -- [ ] Carousel +- [x] Carousel - [ ] Tree - [ ] Menu - [ ] Tabs diff --git a/src/components/carousel/carousel-item.vue b/src/components/carousel/carousel-item.vue index 7381afc..758fe72 100644 --- a/src/components/carousel/carousel-item.vue +++ b/src/components/carousel/carousel-item.vue @@ -1,12 +1,12 @@ <template> - <div :class="prefixCls" v-bind:style="styles"><slot></slot></div> + <div :class="prefixCls" :style="styles"><slot></slot></div> </template> <script> const prefixCls = 'ivu-carousel-item'; export default { componentName: 'carousel-item', - + name: 'CarouselItem', data () { return { prefixCls: prefixCls, @@ -24,10 +24,12 @@ }; } }, - compiled () { + mounted () { + // todo while this.$parent.slotChange(); }, beforeDestroy () { + // todo while this.$parent.slotChange(); } }; diff --git a/src/components/carousel/carousel.vue b/src/components/carousel/carousel.vue index 16c4326..3e4724a 100644 --- a/src/components/carousel/carousel.vue +++ b/src/components/carousel/carousel.vue @@ -4,7 +4,7 @@ <Icon type="chevron-left"></Icon> </button> <div :class="[prefixCls + '-list']"> - <div :class="[prefixCls + '-track']" :style="trackStyles" v-el:slides> + <div :class="[prefixCls + '-track']" :style="trackStyles"> <slot></slot> </div> </div> @@ -13,9 +13,9 @@ </button> <ul :class="dotsClasses"> <template v-for="n in slides.length"> - <li :class="[n === currentIndex ? prefixCls + '-active' : '']" - @click="dotsEvent('click', n)" - @mouseover="dotsEvent('hover', n)"> + <li :class="[n - 1 === currentIndex ? prefixCls + '-active' : '']" + @click="dotsEvent('click', n - 1)" + @mouseover="dotsEvent('hover', n - 1)"> <button></button> </li> </template> @@ -65,7 +65,7 @@ return oneOf(value, ['click', 'hover']); } }, - currentIndex: { + value: { type: Number, default: 0 }, @@ -86,7 +86,8 @@ slides: [], slideInstances: [], timer: null, - ready: false + ready: false, + currentIndex: this.value }; }, computed: { @@ -140,7 +141,7 @@ }); } }, - updateSlides (init ) { + updateSlides (init) { let slides = []; let index = 1; @@ -189,6 +190,7 @@ while (index < 0) index += this.slides.length; index = index % this.slides.length; this.currentIndex = index; + this.$emit('input', index); }, arrowEvent (offset) { this.setAutoplay(); @@ -197,6 +199,7 @@ dotsEvent (event, n) { if (event === this.trigger && this.currentIndex !== n) { this.currentIndex = n; + this.$emit('input', n); // Reset autoplay timer when trigger be activated this.setAutoplay(); } @@ -215,9 +218,6 @@ }); } }, - compiled () { - this.updateSlides(true); - }, watch: { autoplay () { this.setAutoplay(); @@ -231,9 +231,13 @@ }, height () { this.updatePos(); + }, + value (val) { + this.currentIndex = val; } }, - ready () { + mounted () { + this.updateSlides(true); this.handleResize(); this.setAutoplay(); window.addEventListener('resize', this.handleResize, false); diff --git a/src/index.js b/src/index.js index c970dc5..de48edf 100644 --- a/src/index.js +++ b/src/index.js @@ -8,7 +8,7 @@ import Badge from './components/badge'; // import Breadcrumb from './components/breadcrumb'; import Button from './components/button'; // import Card from './components/card'; -// import Carousel from './components/carousel'; +import Carousel from './components/carousel'; // import Cascader from './components/cascader'; import Checkbox from './components/checkbox'; // import Circle from './components/circle'; @@ -57,8 +57,8 @@ const iview = { Button, ButtonGroup: Button.Group, // Card, - // Carousel, - // CarouselItem: Carousel.Item, + Carousel, + CarouselItem: Carousel.Item, // Cascader, Checkbox, CheckboxGroup: Checkbox.Group, diff --git a/test/app.vue b/test/app.vue index 5af50c8..0c01427 100644 --- a/test/app.vue +++ b/test/app.vue @@ -29,6 +29,7 @@ li + li { border-left: solid 1px #bbb; padding-left: 10px; margin-left: 10px; } <li><router-link to="/progress">Progress</router-link></li> <li><router-link to="/upload">Upload</router-link></li> <li><router-link to="/collapse">Collapse</router-link></li> + <li><router-link to="/carousel">Carousel</router-link></li> </ul> </nav> <router-view></router-view> diff --git a/test/main.js b/test/main.js index 2bd3495..36ab8d9 100644 --- a/test/main.js +++ b/test/main.js @@ -80,6 +80,10 @@ const router = new VueRouter({ { path: '/collapse', component: require('./routers/collapse.vue') + }, + { + path: '/carousel', + component: require('./routers/carousel.vue') } ] }); diff --git a/test/routers/carousel.vue b/test/routers/carousel.vue index 0171d80..682b570 100644 --- a/test/routers/carousel.vue +++ b/test/routers/carousel.vue @@ -1,197 +1,28 @@ <template> - <Row> - <i-col span="2"> - Current Index - <p>{{ currentIndex }}</p> - </i-col> - <i-col span="2"> - <p>Autoplay</p> - <Switch :checked.sync="autoplay" size="small"></Switch> - </i-col> - <i-col span="4"> - Speed <Slider :value.sync="autoplaySpeed" :min="300" :max="5000"></Slider> - </i-col> - <i-col span="4"> - Switch To - <Button-group> - <i-button @click="currentIndex = 0">0</i-button> - <i-button @click="currentIndex = 1">1</i-button> - <i-button @click="currentIndex = 2">2</i-button> - </Button-group> - </i-col> - <i-col span="4"> - <i-button @click="push">Push</i-button> - <i-button @click="remove = true">Remove Front</i-button> - </i-col> - </Row> - <Row> - <i-col span="4"> - <p>Dots</p> - <Button-group> - <i-button @click="dots = 'inside'">Inside</i-button> - <i-button @click="dots = 'outside'">Outside</i-button> - <i-button @click="dots = 'none'">None</i-button> - </Button-group> - </i-col> - <i-col span="4"> - <p>Trigger</p> - <Button-group> - <i-button @click="trigger = 'click'">Click</i-button> - <i-button @click="trigger = 'hover'">Hover</i-button> - </Button-group> - </i-col> - <i-col span="4"> - Arrow - <Button-group> - <i-button @click="arrow = 'hover'">Hover</i-button> - <i-button @click="arrow = 'always'">Always</i-button> - <i-button @click="arrow = 'never'">Never</i-button> - </Button-group> - </i-col> - <i-col span="4"> - Height - <i-button @click="height = 'auto'">Auto</i-button> - <i-button @click="height = 80">Manual</i-button> - <Slider v-if="height !== 'auto'" :value.sync="height" :min="50" :max="200"></Slider> - </i-col> - </Row> - <Carousel style="width: 50%; border: solid 1px #000; margin-top: 20px;" - :current-index.sync="currentIndex" - :autoplay="autoplay" - :autoplay-speed="autoplaySpeed" - :dots="dots" - :trigger="trigger" - :arrow="arrow" - :height="height" - @on-change="slideChange" - easing="linear"> - <Carousel-item v-if="!remove"> - <Alert type="warning" show-icon> - 警告提示文案 - <template slot="desc"> - 警告的提示描述文案警告的提示描述文案警告的提示描述文案 - </template> - </Alert> - </Carousel-item> - <Carousel-item> - <div style="height: 150px; background: #f50; position: relative"> - <p style="position: absolute; width: 100%; color: #fff; top: 50%; height: 20px; line-height: 20px; margin-top: -10px; text-align: center">test font 定高测试</p> - </div> - </Carousel-item> - <Carousel-item> - <div style="height: 100%; min-height: 20px; background: #f50; position: relative;"> - <p style="position: absolute; width: 100%; color: #fff; top: 50%; height: 20px; line-height: 20px; margin-top: -10px; text-align: center">test font 居中测试</p> - </div> - </Carousel-item> - <Carousel-item> - <Card style="width:350px"> - <p slot="title"> - <Icon type="ios-film-outline"></Icon> - 经典电影 - </p> - <a href="#" slot="extra"> - <Icon type="ios-loop-strong"></Icon> - 换一换 - </a> - <ul> - - </ul> - </Card> - </Carousel-item> - <Carousel-item style="text-align: center"> - <Icon type="checkmark" style="font-size: 5em"></Icon> - </Carousel-item> - <Carousel-item>test3</Carousel-item> - <Carousel-item v-for="item in pushItem" track-by="$index"> - <Icon type="checkmark" style="font-size: 5em"></Icon>{{item}} - </Carousel-item> - </Carousel> - <div style="max-height: 200px; overflow: scroll"> - <p v-for="item in log" track-by="$index">{{item}}</p> - </div> - - <Card style="width:350px"> - <p slot="title"> - <Icon type="ios-film-outline"></Icon> - 经典电影 - </p> - <Carousel> - <Carousel-item v-if="!remove"> - <Alert type="warning" show-icon> - 警告提示文案 - <template slot="desc"> - 警告的提示描述文案警告的提示描述文案警告的提示描述文案 - </template> - </Alert> + <div> + <Carousel v-model="v1" dots="inside" trigger="hover"> + <Carousel-item> + <div class="demo-carousel">1</div> </Carousel-item> <Carousel-item> - <div style="height: 100%; min-height: 20px; background: #f50; position: relative;"> - <p style="position: absolute; width: 100%; color: #fff; top: 50%; height: 20px; line-height: 20px; margin-top: -10px; text-align: center">test font 定高测试</p> - </div> + <div class="demo-carousel">2</div> </Carousel-item> - <Carousel-item style="text-align: center"> - <Icon type="checkmark" style="font-size: 5em"></Icon> + <Carousel-item> + <div class="demo-carousel">3</div> + </Carousel-item> + <Carousel-item> + <div class="demo-carousel">4</div> </Carousel-item> </Carousel> - </Card> - <Tabs> - <Tab-pane label="标签一"> - <Carousel> - <Carousel-item v-if="!remove"> - <Alert type="warning" show-icon> - 警告提示文案 - <template slot="desc"> - 警告的提示描述文案警告的提示描述文案警告的提示描述文案 - </template> - </Alert> - </Carousel-item> - <Carousel-item> - <div style="height: 100%; min-height: 20px; background: #f50; position: relative;"> - <p style="position: absolute; width: 100%; color: #fff; top: 50%; height: 20px; line-height: 20px; margin-top: -10px; text-align: center">test font 定高测试</p> - </div> - </Carousel-item> - <Carousel-item style="text-align: center"> - <Icon type="checkmark" style="font-size: 5em"></Icon> - </Carousel-item> - </Carousel> - </Tab-pane> - <Tab-pane label="标签二" disabled>标签二的内容</Tab-pane> - <Tab-pane label="标签三"> - <Carousel> - <Carousel-item v-if="!remove"> - <Alert type="warning" show-icon> - 警告提示文案 - <template slot="desc"> - 警告的提示描述文案警告的提示描述文案警告的提示描述文案 - </template> - </Alert> - </Carousel-item> - <Carousel-item> - <div style="height: 100%; min-height: 20px; background: #f50; position: relative;"> - <p style="position: absolute; width: 100%; color: #fff; top: 50%; height: 20px; line-height: 20px; margin-top: -10px; text-align: center">test font 定高测试</p> - </div> - </Carousel-item> - <Carousel-item style="text-align: center"> - <Icon type="checkmark" style="font-size: 5em"></Icon> - </Carousel-item> - </Carousel> - </Tab-pane> - </Tabs> + {{ v1 }} + <div @click="v1 = 0">change v1</div> + </div> </template> <script> export default { data () { return { - currentIndex: 0, - autoplay: true, - autoplaySpeed: 2000, - remove: false, - pushItem: [], - arrow: 'hover', - trigger: 'click', - dots: 'inside', - height: 'auto', - log: [] + v1: 1 } }, methods: { @@ -204,3 +35,13 @@ } } </script> +<style> + .demo-carousel{ + height: 200px; + line-height: 200px; + text-align: center; + color: #fff; + font-size: 20px; + background: #506b9e; + } +</style> \ No newline at end of file -- libgit2 0.21.4