Vue+3D云字符

Vue+3D云字符

问题:PO说系统首页加个3D云字符,我寻思这也没搞过呀;于是就去大哥的博客学习了一下。当然我也是进行了一扭扭的优化,总结的也很简单粗暴,翠花上代码:

html:

<div class="evalu-chan">
     <div class="evalu-chan-titl">
         <i></i><span>3D字符云</span>
     </div>
     <div class="evalu-line">
          <svg :width='width' :height='height' @mousemove='listener($event)'>
              <a :href="tag.href" v-for='(tag,index) in tagList' :key="index">  
                  <text :x='tag.x' :y='tag.y' :font-size='20 * (600/(600-tag.z))' :fill- 
                        opacity='((400+tag.z)/600)' style="fill:#e78c9e;">{{tag.text}}  
                        //这里的style="fill:#e78c9e;"是改变文字颜色的哦
                  </text>
              </a>
          </svg>
     </div>
</div>

data:

      //3D字符云
      width:321*(window.innerWidth / 1440),
      height:250*(window.innerWidth / 1440),
      tagsNum:10,
      RADIUS:170,
      speedX:Math.PI/360,
      speedY:Math.PI/360,
      tagList: [],

computed:

computed:{
    CX(){
        return this.width/2;
    },
    CY(){
        return this.height/2;
    }
  },

mounted: 

//球转起来了
const timer = setInterval(() =>{                    
      this.rotateX(this.speedX);
      this.rotateY(this.speedY);
      this.rotateX1(this.speedX);
      this.rotateY1(this.speedY);
      }, 100);

methods:

//3D字符云
    rotateX(angleX){
        var cos = Math.cos(angleX);
        var sin = Math.sin(angleX);
        for(let tag of this.tagList){
            var y1 = (tag.y- this.CY) * cos - tag.z * sin  + this.CY;
            var z1 = tag.z * cos + (tag.y- this.CY) * sin;
            tag.y = y1;
            tag.z = z1;
        } 
    },
    rotateY(angleY){
      var cos = Math.cos(angleY);
      var sin = Math.sin(angleY);
      for(let tag of this.tagList){
        var x1 = (tag.x - this.CX) * cos - tag.z * sin + this.CX;
        var z1 = tag.z * cos + (tag.x-this.CX) * sin;
        tag.x = x1;
        tag.z = z1;
      } 
    },

//这个方法在html代码被调用了,你康康
    listener(event){//响应鼠标移动
        var x = event.clientX - this.CX;
        var y = event.clientY - this.CY;
        this.speedX = x*0.0001>0 ? Math.min(this.RADIUS*0.00002, x*0.0001) : Math.max(-        
             this.RADIUS*0.00002, x*0.0001);
        this.speedY = y*0.0001>0 ? Math.min(this.RADIUS*0.00002, y*0.0001) : Math.max(- 
             this.RADIUS*0.00002, y*0.0001); 
    },

//这是个方法
    getGood() {
      const _this = this
      axios.get('/ceshi',{params: {code: 1}})
        .then(function(response) {
          if(response.data.data.length>=10){
            _this.tagList = response.data.data.slice(0,10)
          }else{
            _this.tagList = response.data.data
          }
          let tags=[];
          for(let i = 0; i < _this.tagList.length; i++){
              let tag = {};
              let k = -1 + (2 * (i + 1) - 1) / _this.tagsNum;
              let a = Math.acos(k);
              let b = a * Math.sqrt(_this.tagsNum * Math.PI);
              tag.text = _this.tagList[i].appraisa_text;
              tag.x = _this.CX +  _this.RADIUS * Math.sin(a) * Math.cos(b);
              tag.y = _this.CY +  _this.RADIUS * Math.sin(a) * Math.sin(b); 
              tag.z = _this.RADIUS * Math.cos(a);
              //tag.href = 'https://imgss.github.io';
              tags.push(tag);
          }
          _this.tagList = tags;
          if (_this.tagList.length === 0) {
            _this.dataTip1 = '暂无数据'
          } else {
            _this.dataTip1 = ''
          }
        })
    },

视频在此,由于是测试数据,暂时不太好看;当数据丰富的时候超好;

 如有侵权,联系我删除。大佬高台贵手 转载自:https://www.cnblogs.com/imgss/p/tagcloud.html

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue和Three.js是两个热门的Web开发框架和库,分别用于构建用户界面和创建3D场景。结合使用Vue和Three.js可以非常方便地搭建一个3D仓房。 首先,在Vue项目中安装并引入Three.js库。可以使用npm或者直接在HTML中引入CDN链接。然后,使用Vue的组件化开发思想,创建一个3D仓房组件。 在Vue3D仓房组件中,可以使用Three.js的场景(Scene)、相机(Camera)、渲染器(Renderer)等基本元素来创建一个空白的3D场景。可以设定相机的位置和方向,调整渲染器的大小和样式。 接下来,可以使用Three.js提供的几何体(Geometry)和材质(Material)来创建具体的仓房模型。例如,可以使用BoxGeometry创建一个长方体模型,然后使用MeshBasicMaterial设置其颜色或者使用纹理材质来进行贴图。 在几何体和材质创建好之后,可以将其合并成一个网格(Mesh),并添加到场景中。 为了使3D场景更加生动,可以使用Three.js的灯光(Light)来设置光照效果。例如,太阳光照射到仓房模型上,可以使用光源和颜色来模拟阳光的效果。 最后,在Vue3D仓房组件中添加交互功能,例如旋转、缩放或者平移等,可以使用Three.js提供的控制器(Controller)或者自定义事件监听器来实现。 在Vue项目中的相应页面引入3D仓房组件,并传入相应的参数,即可在浏览器中看到搭建好的3D仓房场景。 总之,使用Vue和Three.js搭建3D仓房的过程大致如上所述,需要使用Vue的组件化开发和Three.js的渲染和建模功能来实现。这样可以充分利用两个框架和库的优势,简化开发流程,创建出生动逼真的3D仓房场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值