vue实现长图浏览组件----可以遥控器上下滑动适配各种机型

455 阅读1分钟

vue实现长图浏览组件----可以遥控器上下滑动适配各种机型

我是一个刚入门一个月vue的新手,做了7年Android开发,目前公司项目以vue和Android相结合进行开发,说实话这个需求原生实现很简单,vue真是折腾了半天,本来使用scrollview实现上下滑动,但是TV上还需要相应按键事件,所以这个功能只算实现一半,后来在前端大佬的指导下使用 overflow-y: scroll然后在遥控器上下按的时候滚动合适的距离来实现当vue组件宽度超过屏幕时可以正常滑动和显示。

1.直接上代码:

.scroll_long {
  width: 1920px;
  height: 1080px;
  position: absolute;
  background-color: transparent;
  overflow-y: scroll;
  align-items: center;
  justify-content: center;
}

2.vue里面的布局代码:

<template>
  <div class="scroll_long" ref="scroll_long" v-if="isVisible">
    <div class="scroll_long_main">
      <div class="scroll_long_pic" @layout="layout">
        <tv_net_image class="scroll_long_last_img" :src="longImgData" />
      </div>
    </div>
  </div>
</template>

3.vue各组件css代码如下:

<style scoped>.scroll_long {
  width: 1920px;
  height: 1080px;
  position: absolute;
  background-color: transparent;
  overflow-y: scroll;
  align-items: center;
  justify-content: center;
}
​
.scroll_long_img {
  width: 1920px;
  height: 1080px;
}
​
.scroll_long_last_img {
  width: 900px;
  height: 1200px;
  align-items: center;
  justify-content: center;
}
​
.scroll_long_pic {
  background-color: transparent;
}
</style>

4.vue里面导包:

import {getApp, KeyEvent} from "@/util";//这是一个按键工具类
import {ESLaunchManager} from "@extscreen/es-core";//vue基础组件,基本上vue同学都知道

5.vue图片数据和实现按键上下滚动方法:

export default {
  name: "scroll_long_img",
  data(){
    return {
      isVisible: true,
      offset: 0,
      height: 0,
      scrollEnded: false,
      longImgData:'http://qcloudimg-moss.cp47.ott.cibntv.net/data_center/files/2022/10/11/0c082268-7116-409d-921c-52029af46485.jpg'
    }
  },
  computed: {
    scrollAllHeight() {
      return this.height - 1080
    }
  },
  mounted() {
    this.app = getApp()
  },
  methods: {
    show() {
      this.isVisible = true
    },
    close() {
      this.isVisible = false
    },
    isShow() {
      return this.isVisible
    },
    scrollTo(offset) {
      this.$refs.scroll_long.scrollTo(0, offset, true)
    },
    layout(e) {
      this.height = e.height
    },
    onKeyDown(key) {
      console.log('long_image-----onKeyDown', key.keyCode)
      if (key.keyCode === KeyEvent.down) {
        if (this.offset < this.scrollAllHeight) {
          this.offset += 100;
          if (this.offset > this.scrollAllHeight) {
            this.offset = this.scrollAllHeight
          }
          this.scrollTo(this.offset)
​
          this.scrollEnded = false
        } else {
          this.scrollEnded = true
        }
      } else if (key.keyCode === KeyEvent.up) {
        this.scrollEnded = false
        if (this.offset > 0) {
          if (this.offset >= 100) {
            this.offset -= 100;
          } else {
            this.offset = 0
          }
          this.scrollTo(this.offset)
        }
      }
      return true
    },
    //返回上一个页面
    onBackPressed() {
      ESLaunchManager.finishESPage();
    },
  },
}

6.实现的效果如下:

9cb3b01e40f54e199f022b2052cf2549.gif

img