Flex 缩略图的实现

      最近一直在弄Flex,其中有一个功能就是缩略图,缩略图的场景是:有一个Canvas的容器,这个容器中有很多的显示对象,实现该容器的一个缩略图。(注意:该Canvas容器只显示了一部分,其他部分需要移动滚动条才能看到)

      方法一(借助ImageSnapshot.captureBitmapData方法):

      1、计算出Canvas中所有显示对象右下角的最大X坐标和最大的Y坐标(_maxX,_maxY):

 

var point:Point = caculateMaxPoint(canvas);//canvas为需要缩略的Canvas容器。caculateMaxPoint方法计算该容器中显示对象的X,Y最大的点。

var _maxX:Number = point.x ;

var _maxY:Number = point.y ;

 

      2、将Canvas的width和height分别设置为_maxX和_maxY:

 

canvas.width = _maxX;

canvas.height = _maxY;

         注意: 这一步非常重要,如果没有这个设置,那么使用ImageSnapShot.caputreBitmapData方法获取到的只是Canvas容器当前显示的部分,而不能获取到所有的显示对象。

     3、计算缩略的比例:

 

var matrix : Matrix = new Matrix();

matrix.scale(width/_maxX , height / _maxY);//其中width和height是缩略图所存放容器的宽度和高度。

      4、获取Canvas容器的BitmapData数据:

 

var bitmapData:BitmapData = ImageSnapShot.captureBitmapData(canvas , matrix);

var bitMap:BitMap = new BitMap(bitmapData);

      5、将4步骤中生成的bitMap作为缩略图容器的中<mx:Image>的source。这样Canvas容器的缩略图就出来了。

      6、最后将Canvas容器的width和height恢复为初始的宽度和高度。

      7、当然还有缩略图和原图之间的联动,我是通过缩略图的坐标按照缩放的比例找出原图的坐标,并定位滚动条的位置,这里就不描述了。

      我使用这个方法时遇到的一个问题:使用ImageSnapShot.captureBitmapData(canvas , matrix)时,会对原图缩小然后拍下快照,再将原图恢复。这个过程一般情况下客户是看不到的,但是如果频繁调用这个方法,会导致如果原图出现缩小,然后恢复的过程,这样就影响到原图的效果,目前没有找到解决方法。

      方法二(只是思路):使用COPY 的方法,在Canvas 容器中添加一个属性thumbNailCanvas,它是Canvas 容器的一个复制,任何对Canvas容器的改变,同时也改变thumbNailCanvas。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现缩略图的轮播图,可以使用 Vue.js 和一些现成的轮播组件库,比如 `vue-awesome-swiper`。 以下是一个基本的实现步骤: 1. 安装 `vue-awesome-swiper`: ```bash npm install vue-awesome-swiper --save ``` 2. 在 Vue 组件中引入 `vue-awesome-swiper`: ```javascript import { swiper, swiperSlide } from 'vue-awesome-swiper' export default { components: { swiper, swiperSlide }, data() { return { swiperOption: { // 设置轮播图的配置项 }, // 缩略图图片数组 thumbnailList: [ { src: 'thumbnail-1.jpg', alt: 'thumbnail-1' }, { src: 'thumbnail-2.jpg', alt: 'thumbnail-2' }, { src: 'thumbnail-3.jpg', alt: 'thumbnail-3' } ] } } } ``` 3. 在 Vue 模板中使用 `vue-awesome-swiper`: ```html <swiper :options="swiperOption"> <swiper-slide> <img src="slide-1.jpg" alt="slide-1"> </swiper-slide> <swiper-slide> <img src="slide-2.jpg" alt="slide-2"> </swiper-slide> <swiper-slide> <img src="slide-3.jpg" alt="slide-3"> </swiper-slide> ... </swiper> <!-- 缩略图 --> <div class="thumbnail-list"> <div v-for="(item, index) in thumbnailList" :key="index" class="thumbnail-item"> <img :src="item.src" :alt="item.alt" @click="goToSlide(index)"> </div> </div> ``` 4. 在 Vue 组件中定义 `goToSlide` 方法来实现缩略图与轮播图的联动: ```javascript methods: { goToSlide(index) { // 使用 $refs 获取到 swiper 实例 this.$refs.mySwiper.swiper.slideTo(index) } } ``` 完整的代码示例: ```html <template> <div class="carousel-container"> <swiper ref="mySwiper" :options="swiperOption"> <swiper-slide> <img src="slide-1.jpg" alt="slide-1"> </swiper-slide> <swiper-slide> <img src="slide-2.jpg" alt="slide-2"> </swiper-slide> <swiper-slide> <img src="slide-3.jpg" alt="slide-3"> </swiper-slide> ... </swiper> <!-- 缩略图 --> <div class="thumbnail-list"> <div v-for="(item, index) in thumbnailList" :key="index" class="thumbnail-item"> <img :src="item.src" :alt="item.alt" @click="goToSlide(index)"> </div> </div> </div> </template> <script> import { swiper, swiperSlide } from 'vue-awesome-swiper' export default { components: { swiper, swiperSlide }, data() { return { swiperOption: { // 设置轮播图的配置项 }, // 缩略图图片数组 thumbnailList: [ { src: 'thumbnail-1.jpg', alt: 'thumbnail-1' }, { src: 'thumbnail-2.jpg', alt: 'thumbnail-2' }, { src: 'thumbnail-3.jpg', alt: 'thumbnail-3' } ] } }, methods: { goToSlide(index) { // 使用 $refs 获取到 swiper 实例 this.$refs.mySwiper.swiper.slideTo(index) } } } </script> <style> .carousel-container { position: relative; width: 100%; height: 100%; } .thumbnail-list { position: absolute; bottom: 0; width: 100%; display: flex; justify-content: center; } .thumbnail-item { margin: 0 10px; cursor: pointer; } </style> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值