欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Vue头像处理方案小结

程序员文章站 2022-06-14 13:43:00
个人思路 获取后台返回头像url,判断图片宽度,高度。 如果宽度>高度, 使其高度填充盒子 两边留白。 如果宽度<高度,使得宽度填充盒子 上下留白。 效...

个人思路

获取后台返回头像url,判断图片宽度,高度。

如果宽度>高度, 使其高度填充盒子 两边留白。

如果宽度<高度,使得宽度填充盒子 上下留白。

效果图:

Vue头像处理方案小结

缺陷:懒加载图片 会出现闪烁

Vue头像处理方案小结

代码实现

<template>
  // 外面要给一个div并且限制宽度和高度,text-align center,overflow hidden
  <div class="head">
    // userinfolist.avatar 是后台返回给我的头像url
    <img v-lazy="userinfolist.avatar" id="userhead" alt=""/>  
  </div>
  <div class="fl" v-for="(item, index) in matchlist" :key="index">
    <div class="heads">
      <img v-lazy="item.adatar" class="headitem" alt=""/>
    </div>
  </div >
</template>
<script>
import { head, heads } from '@/assets/js/base'  // 存放head,heads目录引入
export default {
data(){
 return {
   listquery:{
     pg: 1,
     ps: 10
  }
},
methods:{
  //获取用户详情
  getuserinfolist(){
   getlist('mobile/user/pers/detail', funciton(res) {
     if(data.code == err_ok){
        _this.userinfolist = res.data
        // 单个头像处理,$nexttick处理去报 数据加载完成后 在进行图
        _this.$nexttick(function () { 
           head(res.data.avatar, 'userhead')
        })
        // 下拉加载多个头像处理
        res.data.item.foreach((item, index) => {
          if(_this.listquery.pg>1){ // 下拉加载时,头像依然要进行处理
             let count = (10*(_this.listquery.pg -1) + index)
             _this.$nexttick(function () {
                heads(item.adatar, count, 'headitem')
             })
          }else{
            _this.$nexttick(function () {
               heads(item.adatar, index, 'headitem')
            })
          }
        } 
      _this.listquery.pg++
    }
  })
 }

assets文件js下的base.js

// 单个头像处理
export function head (objurl, id) {
   let _userhead = document.getelementbyid(id)
   if(_userhead){
      if(objurl){
        let img = new image()
        img.src = objurl
        img.onload = function () {
            let _width = img.width
            let _height = img.height
            if(_width >= _height){
              _userhead.style.width = '100%'
           }else{
              _userhead.style.height = '100%'
            }
        }
      }else{
         _userhead.style.width = '100%'
      }
   }
}
// 多个头像处理
export function heads (objurl, index, classname) {
    let _heads = document.getelementsbyclassname(classname)[index]
    if(_heads){
      if(objurl){
        let img = new image()
        img.src = objurl
        img.onload = function () {
           let _width = img.width
           let _height = img.height
           if(_width >= _height){
              _heads.style.width = '100%'
           }else{
             _heads.style.height = '100%'
           }
       }
     }else{
         _heads.style.width = '100%'
     }
  }
}

总结

以上所述是小编给大家介绍的vue头像处理方案小结,希望对大家有所帮助