ready () {
if(this.$el.parentNode.offsetWidth + this.$el.parentNode.offsetLeft - this.$el.offsetLeft <= 300){
this.coordinates = {right: '0', top: `${window.getComputedStyle(this.$el.children[0]).offsetHeight + 4}px`}
}else{
this.coordinates = {left: '0', top: `${window.getComputedStyle(this.$el.children[0]).offsetHeight + 4}px`}
}
}
<!-- template中对应的动态style -->
<div :style="coordinates"></div>
为了panel的显隐可以平滑过渡,可以使用transition做过渡动画,这里我简单地通过一个0.2秒的透明度过渡让显隐更平滑。
<div :style="this.coordinates" v-show="panelState" transition="toggle"></div>
//less syntax
.toggle{
&-transition{
transition: all ease .2s;
}
&-enter, &-leave{
opacity: 0;
}
}
中英文切换
这里其实也很简单,这种多语言切换实质就是一个key根据不同的type而输出不同的value,所以使用filter可以很容易的实现它!比如渲染星期的列表:
<ul class="weeks">
<li v-for="item in weekList" v-text="item | week language"></li>
</ul>
filters : {
week (item, lang){
switch (lang) {
case 'en':
return {0: 'Su', 1: 'Mo', 2: 'Tu', 3: 'We', 4: 'Th', 5: 'Fr', 6: 'Sa'}[item]
case 'ch':
return {0: '日', 1: '一', 2: '二', 3: '三', 4: '四', 5: '五', 6: '六'}[item]
default:
return item
}
}
}
多种使用方式
对于一个Vue组件,如果是使用webpack + vue-loader的.vue单文件写法,我希望这样使用:
//App.vue
<script>
import datepicker from 'path/to/datepicker.vue'
export default {
components: { datepicker}
}
</script>
如果是直接在浏览器中使用,那么我希望datepicker这个组件是暴露在全局下的,可以这么使用:
//index.html
<html>
<script src="path/to/vue.js"></script>
<script src="path/to/datepicker.js"></script>
<body>
<div id="app"></div>
<script>
new Vue({
el: '#app',
components: { datepicker }
})
</script>
</body>
</html>
这里我选择了webpack作为打包工具,使用webpack的output.library和output.linraryTarget这两个属性就可以把你的bundle文件作为库文件打包。library定义了库的名字,libraryTarget定义了你想要打包的格式,具体可以看文档。我希望自己的库可以通过datepicker加载到,并且打包成umd格式,因此我的webpack.config.js是这样的:
module.exports = {
entry: './index.js',
output: {
path: './dist',
library: 'datepicker',
filename: 'vue-datepicker.js',
libraryTarget: 'umd'
},
module: {
loaders: [
{test: /\.vue$/, loaders: ['vue']},
{test: /\.js$/, exclude: /node_modules/, loaders: ['babel']}
]
}
}
内容版权声明:除非注明,否则皆为本站原创文章。

