小程序3D标签云

微信小程序实现3D标签云
在网上查找了许多3d标签云的案列,一般都是用原生和jquery写的,然后参考
https://www.cnblogs.com/axes/p/3501424.html这篇文章
在小程序里面实现标签云,具体代码如下

wxml

// An highlighted block
<view class="tagBall">
  <a class="tag" wx:for="{{tagEle}}" wx:key="{{index}}" style="opacity:{{item.o}};z-index:{{item.z}};left: {{item.x}}rpx;top: {{item.y}}rpx;transform: scale({{item.s}})">
    {{item.title}}
  </a>
 </view>

wxss

.tagBall{
      width: 420rpx;
      height: 300rpx;
      margin:300rpx auto;
      position: relative;
      left: 120rpx;
  }
  .tag{
      display: block;
      position: absolute;
      left: 0rpx;
      top: 0rpx;
      color: #000;
      text-decoration: none;
      font-size: 32rpx;
      font-family: "微软雅黑";
      font-weight: bold;
  }
  .tag:hover{border:1px solid #666;}

js

innit() {
     var tagEle = [
       {
         title: '被子',
         x: 0,
         y: 0,
         z: 0,
         s: 0,
         o: 1,
         f: 15,
         angleX: 0,
         angleY: 0
       },
       {
         title: '咖啡機',
         x: 0,
         y: 0,
         z: 0,
         s: 0,
         o: 1,
         f: 15,
         angleX: 0,
         angleY: 0
       },
       {
         title: '飛機',
         x: 0,
         y: 0,
         z: 0,
         s: 0,
         o: 1,
         f: 15,
         angleX: 0,
         angleY: 0
       },
       {
         title: '电脑',
         x: 0,
         y: 0,
         z: 0,
         s: 0,
         o: 1,
         f: 15,
         angleX: 0,
         angleY: 0
       },
       {
         title: '手机',
         x: 0,
         y: 0,
         z: 0,
         s: 0,
         o: 1,
         f: 15,
         angleX: 0,
         angleY: 0
       },
       {
         title: '键盘',
         x: 0,
         y: 0,
         z: 0,
         s: 0,
         o: 1,
         f: 15,
         angleX: 0,
         angleY: 0
       },
       {
         title: '奶飞机',
         x: 0,
         y: 0,
         z: 0,
         s: 0,
         o: 1,
         f: 15,
         angleX: 0,
         angleY: 0
       },
       {
         title: '桌子',
         x: 0,
         y: 0,
         z: 0,
         s: 0,
         o: 1,
         f: 15,
         angleX: 0,
         angleY: 0
       },
       {
         title: '板凳',
         x: 0,
         y: 0,
         z: 0,
         s: 0,
         o: 1,
         f: 15,
         angleX: 0,
         angleY: 0
       },
       {
         title: '杯子',
         x: 0,
         y: 0,
         z: 0,
         s: 0,
         o: 1,
         f: 15,
         angleX:0,
         angleY:0
       },
       {
         title: '被子',
         x: 0,
         y: 0,
         z: 0,
         s: 0,
         o: 1,
         f: 15,
         angleX: 0,
         angleY: 0
       },
       {
         title: '咖啡機',
         x: 0,
         y: 0,
         z: 0,
         s: 0,
         o: 1,
         f: 15,
         angleX: 0,
         angleY: 0
       },
       {
         title: '飛機',
         x: 0,
         y: 0,
         z: 0,
         s: 0,
         o: 1,
         f: 15,
         angleX: 0,
         angleY: 0
       },
       {
         title: '电脑',
         x: 0,
         y: 0,
         z: 0,
         s: 0,
         o: 1,
         f: 15,
         angleX: 0,
         angleY: 0
       },
       {
         title: '手机',
         x: 0,
         y: 0,
         z: 0,
         s: 0,
         o: 1,
         f: 15,
         angleX: 0,
         angleY: 0
       },
       {
         title: '键盘',
         x: 0,
         y: 0,
         z: 0,
         s: 0,
         o: 1,
         f: 15,
         angleX: 0,
         angleY: 0
       },
       {
         title: '奶飞机',
         x: 0,
         y: 0,
         z: 0,
         s: 0,
         o: 1,
         f: 15,
         angleX: 0,
         angleY: 0
       },
       {
         title: '桌子',
         x: 0,
         y: 0,
         z: 0,
         s: 0,
         o: 1,
         f: 15,
         angleX: 0,
         angleY: 0
       },
       {
         title: '板凳',
         x: 0,
         y: 0,
         z: 0,
         s: 0,
         o: 1,
         f: 15,
         angleX: 0,
         angleY: 0
       },
       {
         title: '杯子',
         x: 0,
         y: 0,
         z: 0,
         s: 0,
         o: 1,
         f: 15,
         angleX: 0,
         angleY: 0
       }
     ]
     for (var i = 0; i < tagEle.length; i++) {
       var fallLength = 100 //圆的焦点
       var angleX = Math.PI / 100
       var angleY = Math.PI / 100
       var k = (2 * (i + 1) - 1) / tagEle.length - 1;
       //计算按圆形旋转
       var a = Math.acos(k);
       var b = a * Math.sqrt(tagEle.length * Math.PI);
      //计算元素x,y坐标
       var numx = 120 * Math.sin(a) * Math.cos(b)
       var numy = 120 * Math.sin(a) * Math.sin(b);
       var numz = 220 * Math.cos(a);

      // console.log(numo)
       //计算元素缩放大小
       tagEle[i].x = numx * 2
       tagEle[i].y = numy * 2
       tagEle[i].z = numz
       tagEle[i].s = 250 / (400 - tagEle[i].z)
     }
      //动画
       setInterval( () =>{
         for (var i = 0; i < tagEle.length; i++) {
           var a = Math.acos(k);
           var numz = 240 * Math.cos(a);
           tagEle[i].s = 250 / (400 - tagEle[i].z)
           var cos = Math.cos(angleX);
           var sin = Math.sin(angleX);
           var y1 = tagEle[i].y * cos - tagEle[i].z * sin;
           var z1 = tagEle[i].z * cos + tagEle[i].y * sin;
           tagEle[i].y = y1;
           tagEle[i].z = z1;

           var cos = Math.cos(angleY);
           var sin = Math.sin(angleY);
           var x1 = tagEle[i].x * cos - tagEle[i].z * sin;
           var z1 = tagEle[i].z * cos + tagEle[i].x * sin;
           tagEle[i].x = x1;
           tagEle[i].z = z1;
           this.setData({
             tagEle: tagEle
           })
         }
       }, 100)
  },

最后把innit()在onShow()方法里面调用就ok了,效果图如下(静态图),动态你可以参照上面代码运行可以看到效果,本人是新手,希望大神多多指教

效果图

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值