add decoration 4
This commit is contained in:
		
							
								
								
									
										109
									
								
								src/components/decoration4/index.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										109
									
								
								src/components/decoration4/index.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,109 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div :class="`decoration-4 ${reverse ? 'reverse' : 'normal'}`" :ref="ref">
 | 
			
		||||
    <svg :class="`svg-container ${reverse ? 'ani-width' : 'ani-height'}`">
 | 
			
		||||
      <template v-if="!reverse">
 | 
			
		||||
        <polyline class="lighter-line" :points="`3, 5 3, ${height - 5}`" />
 | 
			
		||||
        <polyline class="bolder-line" :points="`3, 5 3, ${height - 5}`" />
 | 
			
		||||
      </template>
 | 
			
		||||
 | 
			
		||||
      <template v-else>
 | 
			
		||||
        <polyline class="lighter-line" :points="`5, 3 ${width - 5},3`" />
 | 
			
		||||
        <polyline class="bolder-line" :points="`5, 3 ${width - 5},3`" />
 | 
			
		||||
      </template>
 | 
			
		||||
    </svg>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
export default {
 | 
			
		||||
  name: 'Decoration4',
 | 
			
		||||
  data () {
 | 
			
		||||
    return {
 | 
			
		||||
      ref: `decoration-4-${(new Date()).getTime()}`,
 | 
			
		||||
      width: 0,
 | 
			
		||||
      height: 0
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  props: ['reverse'],
 | 
			
		||||
  methods: {
 | 
			
		||||
    init () {
 | 
			
		||||
      const { $nextTick, $refs, ref } = this
 | 
			
		||||
 | 
			
		||||
      $nextTick(e => {
 | 
			
		||||
        this.width = $refs[ref].clientWidth
 | 
			
		||||
        this.height = $refs[ref].clientHeight
 | 
			
		||||
      })
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  mounted () {
 | 
			
		||||
    const { init } = this
 | 
			
		||||
 | 
			
		||||
    init()
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="less" scoped>
 | 
			
		||||
@import url('../../assets/style/index.less');
 | 
			
		||||
 | 
			
		||||
.decoration-4 {
 | 
			
		||||
 | 
			
		||||
  &.normal {
 | 
			
		||||
    width: 6px;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  &.reverse {
 | 
			
		||||
    height: 6px;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .svg-container {
 | 
			
		||||
 | 
			
		||||
    &.ani-height {
 | 
			
		||||
      width: 100%;
 | 
			
		||||
      height: 0%;
 | 
			
		||||
      animation: ani-height 3s ease-in-out infinite;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    &.ani-width {
 | 
			
		||||
      width: 0%;
 | 
			
		||||
      height: 100%;
 | 
			
		||||
      animation: ani-width 3s ease-in-out infinite;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    polyline {
 | 
			
		||||
      fill: none;
 | 
			
		||||
      stroke: fade(gray, 25);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .lighter-line {
 | 
			
		||||
    stroke-width: 1px;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .bolder-line {
 | 
			
		||||
    stroke-width: 3px;
 | 
			
		||||
    stroke-dasharray: 20, 80;
 | 
			
		||||
    stroke-dashoffset: -30;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @keyframes ani-height {
 | 
			
		||||
    70% {
 | 
			
		||||
      height: 100%;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    100% {
 | 
			
		||||
      height: 100%;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @keyframes ani-width {
 | 
			
		||||
    70% {
 | 
			
		||||
      width: 100%;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    100% {
 | 
			
		||||
      width: 100%;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
		Reference in New Issue
	
	Block a user