大屏用到的工具

82 阅读2分钟

1、 第一个工具"swiper",下面的部分class的名字是固定的(必须这么写),具体请参考swiper官网。下面实现的是图片内容轮播: swiperjs.com/swiper-api#…

  <div class="swiper" ref="swiperContainer">
      <div class="swiper-wrapper">
        <div v-for="item in carouselList" :key="item.name" class="swiper-slide">
          <div class="title">{{ item.name }}</div>
          <div class="charts">
          </div>
          <div class="content-right-data">
            <div class="right-data-actual">
              <div class="actual-num">{{ handleNull(item.progressTimelyNum) }}<span></span></div>
              <div class="actual-title">及时</div>
            </div>
            <div class="right-data-target">
              <div class="target-num">{{ handleNull(item.progressTotalNum) }}<span></span></div>
              <div class="target-title">总数</div>
            </div>
          </div>
          <div class="footer"></div>
        </div>
      </div>
      <!-- If we need pagination -->
      <div class="swiper-pagination"></div>

      <!-- If we need navigation buttons -->
      <div class="swiper-button-prev"></div>
      <div class="swiper-button-next"></div>

      <!-- If we need scrollbar -->
      <div class="swiper-scrollbar"></div>
 </div>
    import Swiper from 'swiper'
    import { Autoplay, Scrollbar } from 'swiper/modules'
    import 'swiper/css'
    import 'swiper/css/autoplay'
    import 'swiper/css/scrollbar'
    import 'swiper/css/thumbs'
    onMounted(() => {
      var mySwiper1 = new Swiper(swiperContainer.value, {
        modules: [Autoplay, Scrollbar],
        watchSlidesProgress: true,
        initialSlide: 0,
        loop: true,
        grabCursor: true,
        centeredSlides: false,
        slidesPerView: 'auto',
        pagination: {
          el: '.swiper-pagination',
          type: 'progressbar'
        },
        /** 滚动条 */
        scrollbar: {
          enabled: true,
          el: '.swiper-scrollbar',
          draggable: true
        },
        autoplay: {
          delay: 1000,
          pauseOnMouseEnter: true
        }
      })
    })
    //部分数据
    const carouselList = ref([
      {
        name: '森林落叶1',
        progressValue: null,
        progressTimelyNum: null,
        progressTotalNum: 100
      },
      {
        name: '森林落叶2',
        progressValue: null,
        progressTimelyNum: 48,
        progressTotalNum: 100
      }]

2、第二个工具是 vueSeamlessScroll ,下面实现的是列表文字无缝往下滚动:

   <div class="lrCont" @click="liClick2">
      <vue-seamless-scroll :data="listData" :class-option="classOption" class="scrollwarp">
              <ul class="item">
                <li v-for="(item, index) in listData" :key="index" :data-obj="JSON.stringify(item)" >
                  <span class="index-num">{{ index + 1 }}</span>
                  <span class="title">{{ item?.title || '--' }}</span>
                  <span class="num1">{{ item?.num1}}</span>
                  <span class="num2">{{ item?.num2}}</span>
                  <span class="num3">{{ item?.num3 }}</span>
                </li>
              </ul>
       </vue-seamless-scroll>
   </div>
     import vueSeamlessScroll from 'vue-seamless-scroll'
     const liClick2 = (event) => {
      console.log('点击某一行会触发这个事件', event, event.target)
    }
    //配置
    const classOption = ref({
      limitMoveNum: 4,
      singleHeight: 49,
      step: 0.8,
      waitTime: 2000
    })
    //部分数据
    const listData = ref([
      {
        id: 1,
        title: '第一行',
        num1: '55',
        num2: '66',
        num3: '88'
      },
      {
        id: 2,
        title: '第二行',
        num1: '55',
        num2: '66',
        num3: '88'
      },
      {
        id: 3,
        title: '第三行',
        num1: '55',
        num2: '66',
        num3: '88'
      }]       

3、第三个工具 颜色处理工具tinycolor2,一下就是转换颜色空间、操作颜色的方法

//转换颜色空间
const color = tinycolor("red");
// RGB -> HEX
color.toHex(); // #ff0000  
// HEX -> RGB
tinycolor("#ff0000").toRgb(); // { r: 255, g: 0, b: 0 }  
// HSL -> RGB
tinycolor({ h: 0, s: 1, l: 0.5 }).toRgb(); // { r: 255, g: 0, b: 0 }

//操作颜色
const color = tinycolor("red");
// 增加亮度
color.lighten(10); // tinycolor("#ff6666")
// 减少亮度
color.darken(10); // tinycolor("#cc0000")
// 增加饱和度
color.saturate(10); // tinycolor("#ff1a1a")
// 减少饱和度
color.desaturate(10); // tinycolor("#ff3333")
// 增加透明度
color.setAlpha(0.5); // tinycolor("rgba(255,0,0,0.5)")
// 减少透明度
color.setAlpha(0.2); // tinycolor("rgba(255,0,0,0.2)")

4、第四个工具 tweenjs,tweenjs 是使用 JavaScript 中的一个简单的补间动画库,支持数字、对象的属性和 CSS 样式属性的赋值,并允许链接补间动画和行动结合起来,创造出复杂的序列。下面实现的是数字从0到335的动画。

<div>{{ snum }}</div>

import { Easing, Tween, update } from '@tweenjs/tween.js'
let tween;
const snum = ref();

function initTween() {
  tween = new Tween({ tweeningValue: 0 })
    .delay(1000)
    .duration(8000)
    .easing(Easing.Circular.In)
    .to({ tweeningValue: 335 })
    .onUpdate(({ tweeningValue: nowVal }) => {
      console.log('tween-value', nowVal)
      snum.value = Math.floor(nowVal)
    })
}
const animalTween = () => {
  tween.start() //开始动画
  const render = (): void => {
    update()//new出来的Tween的update
    requestAnimationFrame(render)//相当于setTimeout,刷新动画
  }
  render()
}
onMounted(() => {
  initTween();//初始化动画
})
const liClick2 = (event) => {
  animalTween()//触发动画
}