小程序仿soul星球

这篇具有很好参考价值的文章主要介绍了小程序仿soul星球。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

小程序仿soul星球

wxml代码

下面展示一些 内联代码片文章来源地址https://www.toymoban.com/news/detail-775059.html

<view class="content">
  <view style="width: 700rpx;">
    <view>
      <view class="tagBall" catch:touchstart="touchstartscene" catch:touchend="touchendscene" catch:touchmove="touchmovescene">
        <view class="tag" wx:for="{{texts}}" wx:key="index" style="filter:{{liviews[index].filter}};font-size:{{liviews[index].fontSize}};left:{{liviews[index].left}}; opacity: {{liviews[index].opacity}};top:{{liviews[index].top}};z-index: {{liviews[index].zIndex}}">
          <view class="scroll-text-warp">
            <text class="scroll-text">测试</text>
          </view>
          <view class="dot" style="width: {{liviews[index].fontSize}};height: {{liviews[index].fontSize}};"></view>
        </view>
      </view>
    </view>
  </view>
</view>

js代码

const app=getApp()
var _self;
Page({

  /**
   * 页面的初始数据
   */
  data: {
    texts: [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
    speed: 0.2, //越大越快
    tagEle: [],
    RADIUS: 300,
    fallLength: 400,
    angleX: Math.PI / 400,
    angleY: Math.PI / 400,
    tags: [],
    liviews: [],
    CX: 0,
    CY: 0,
    timer: null,
    clickX: 0,
    clickY: 0,
    ReachBottom: false, //子组件触底
  },

  //生命周期函数--监听页面加载
  onLoad(options) {
    _self=this
  },
  onShow() {
    // var tagEle = document.querySelectorAll(".tag")
    let query = wx.createSelectorQuery()
    query.selectAll('.tag').boundingClientRect()
    query.exec((res) => {  
      var tagEle=res[0]
      let array=[];
      for (var i = 0; i < tagEle.length; i++) {
        array.push({offsetWidth:tagEle[i].width,offsetHeight:tagEle[i].height})
      }
      _self.getTags({tagEle:array,CX:175,CY:175})
    })  
  },
  clearTimer() {
    clearInterval(_self.data.timer);
  },
  getTags(option) {
    _self.data.tagEle=option.tagEle
    _self.data.CX=option.CX
    _self.data.CY=option.CY
    console.log(this.data.tagEle)
    _self.innit();
  },
  rotateX() {
    var cos = Math.cos(_self.data.angleX * _self.data.speed);
    var sin = Math.sin(_self.data.angleX * _self.data.speed);
    for (var i = 0; i < _self.data.tags.length; i++) {
      let t = _self.data.tags[i]
      var y1 = t.y * cos - t.z * sin;
      var z1 = t.z * cos + t.y * sin;
      t.y = y1;
      t.z = z1;
    }
  },
  rotateY() {
    var cos = Math.cos(_self.data.angleY * _self.data.speed);
    var sin = Math.sin(_self.data.angleY * _self.data.speed);
    for (var i = 0; i < _self.data.tags.length; i++) {
      let t = _self.data.tags[i]
      var x1 = t.x * cos - t.z * sin;
      var z1 = t.z * cos + t.x * sin;
      t.x = x1;
      t.z = z1;
    }
  },
  innit() {
    for (var i = 0; i < _self.data.tagEle.length; i++) {
      var a, b;
      var k = (2 * (i + 1) - 1) / _self.data.tagEle.length - 1;
      var a = Math.acos(k);
      var b = a * Math.sqrt(_self.data.tagEle.length * Math.PI);
      // var a = Math.random()*2*Math.PI;
      // var b = Math.random()*2*Math.PI;
      var x = _self.data.RADIUS * Math.sin(a) * Math.cos(b);
      var y = _self.data.RADIUS * Math.sin(a) * Math.sin(b);
      var z = _self.data.RADIUS * Math.cos(a);
      var t = new _self.tag(_self.data.tagEle[i], x / 2, y / 2, z / 2);
      _self.data.tags.push(t);
      _self.move(t, i)
    }
    _self.setData({
      liviews:_self.data.liviews
    })
    _self.animate(_self.data.tags);
    //_self.$forceUpdate()
  },
  tag: function(ele, x, y, z) {
    this.ele = ele;
    this.x = x;
    this.y = y;
    this.z = z;
  },
  move(t, i) {
    var scale = _self.data.fallLength / (_self.data.fallLength - t.z * 1.3);
    var alpha = (t.z + _self.data.RADIUS) / (2 * _self.data.RADIUS);
    _self.data.liviews.push({
      fontSize:10 * scale + 'px',
      opacity: alpha + 0.5,
      filter: 'alpha(opacity = ' + (alpha + 0.1) * 100 + ')',
      zIndex: parseInt(scale * 100),
      left: t.x + _self.data.CX - t.ele.offsetWidth / 2 + "px",
      top: t.y + _self.data.CY - t.ele.offsetHeight / 2 + "px",
      color:'#6555aa'
    });
   
  },
  animate(x) {
    _self = _self;
    _self.data.timer = setInterval(function () {
      _self.rotateX();
      _self.rotateY();
      _self.data.liviews=[]
      _self.data.dotlist=[]
   
      for (var i = 0; i < x.length; i++) {
        _self.move(x[i], i);
      }
      _self.setData({
        liviews:_self.data.liviews
      })
    },10)
  },
  touchstartscene(e) {
    _self.data.clickX=e.touches[0].clientX
    _self.data.clientY=e.touches[0].clientY
    clearInterval(_self.data.timer);
  },
  touchendscene() {
    _self.animate(_self.data.tags)
  },
  touchmovescene(e) {
    console.log(e)
    _self = _self;
    var fx = _self.getDirection( _self.data.clickX,  _self.data.clickY, e.touches[0].clientX, e.touches[0].clientY)
    var x =  _self.data.clickX - e.touches[0].clientX -  _self.data.CX;
    var y =  _self.data.clickY - e.touches[0].clientY -  _self.data.CY;
    if (fx == 1) {
      x = e.touches[0].clientX - _self.data.clickX;
      y = e.touches[0].clientY - _self.data.clickY - _self.data.CY;
    } else if (fx == 2) {
      x = e.touches[0].clientX - _self.data.clickX;
      y = e.touches[0].clientY + _self.data.CY;
    } else if (fx == 3) {
      x = e.touches[0].clientX - _self.data.CX - _self.data.clickX;
      y = e.touches[0].clientY - _self.data.CY;
    } else {
      x = _self.data.clickX - e.touches[0].clientX - _self.data.CX;
      y = _self.data.clickY - e.touches[0].clientY - _self.data.CY;
    }
    _self.data.angleY = x * 0.0001;
    _self.data.angleX = y * 0.0001;
    _self.rotateX();
    _self.rotateY();
    _self.data.liviews=[];
    for (var i = 0; i < _self.data.tags.length; i++) {
      _self.move(_self.data.tags[i], i);
    }
    _self.setData({
      liviews:_self.data.liviews
    })
  },
  getDirection(startx, starty, endx, endy) {
    var angx = endx - startx;
    var angy = endy - starty;
    var result = 0;
    if (Math.abs(angx) < 2 && Math.abs(angy) < 2) {
      return result;
    }
    var angle = Math.atan2(angy, angx) * 180 / Math.PI;;
    if (angle >= -135 && angle <= -45) {
      result = 1;
    } else if (angle > 45 && angle < 135) {
      result = 2;
    } else if ((angle >= 135 && angle <= 180) || (angle >= -180 && angle < -135)) {
      result = 3;
    } else if (angle >= -45 && angle <= 45) {
      result = 4;
    }
    return result;
  },
  onHide() {
    _self.clearTimer();
  },

})

wxss代码

page {
  background-color: #000000;
}
.content{
  width: 100vw;
  height: 100vh;
  display: flex;
  justify-content: center;
  align-items: center;
}

.tagBall {
  width: 700rpx;
  height: 700rpx;
  margin: 0 auto;
  position: relative;
}

.tag {
  width: 150rpx;
  position: absolute;
  color: #FFFFFF;
  font-size: 15rpx;
  display: flex;
  flex-direction: column;
  align-items: center;
  transform: fontSize 0.1s, left 0.1s ,top 0.1s;
}

.dot {
  width: 40rpx;
  height: 40rpx;
  background-color: #FFFFFF;
  border-radius: 50%;
  margin-top: 10rpx;
  transform: width 0.1s ,height 0.1s;
}
scroll-text-warp{
  overflow: hidden;
  width: auto;
}
.scroll-text {
  white-space: nowrap;
  display: inline-block;
}
创作不易,请各位点个赞

到了这里,关于小程序仿soul星球的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Soul 云原生网关最佳实践

    Soul 是基于兴趣图谱和游戏化玩法的产品设计,属于新一代年轻人的虚拟社交网络。成立于2016年,Soul 致力于打造一个“年轻人的社交元宇宙”,最终愿景是“让天下没有孤独的人”。在 Soul,用户可以无顾虑地表达自己,认知他人,探索世界,交流兴趣和观点,获得精神共鸣

    2024年02月02日
    浏览(29)
  • AI社交来了,百度、Soul“双向奔赴”

    随着科技的飞速进步和迅猛发展,AI技术已经开始渗透到教育、工作、社交、娱乐和健康多个领域,并为人们生活中的多个场景带来了诸多的创新和可能性。甚至可以说,AI技术已经深刻地介入到了我们日常生活的方方面面,让我们的生活方式发生了巨大的改变。 AI的崛起不可

    2024年02月13日
    浏览(23)
  • Soul涉赌?元宇宙“皮囊”绷不住走样的“灵魂社交”

    “软色情”、“杀猪盘”之后,陌生人社交平台Soul又多了一张“涉赌”标签。 8月初,视频媒体@青蜂侠Bee报道称,Soul平台内游戏“星际庄园”名为“种地”,但用户充值种“水果”、平台发起概率抽奖、奖励转手可场外变现的玩法暗藏赌博机制,平台内的直播间甚至以“种

    2024年02月11日
    浏览(27)
  • JavaScript - 判断当前时间是否在指定区间内,例如:9:00~12:00(检查当前时间是否处于规定的两个时间段范围内),适用于 vue.js / uniapp / 微信小程序等前端项目

    例如,您想知道当前时间是否处于 9:00 ~ 12:00 时间区间内,然后根据这个判断进而实现业务逻辑。 如下示例所示, 本文提供一个函数,您只需要传入 2 个时间区间,便可得出当前时间是否在该时间区间范围内: 您可以一键复制,直接粘贴到您的项目中。 您只需要传入开始时

    2024年02月16日
    浏览(50)
  • Soul App:来一场始于“兴趣”,轻松自在的“零糖”社交吧

    岁末年终,回顾2023年,这一年你都做了什么呢? 记不清楚没关系,互联网都帮你记录好了。2023年,B站的年轻人当“所见所闻”刷新自身认知时,往往会发送弹幕“啊?”来抒发惊叹。这一年,支付宝“小荷包”的用户中00后占了4成,近一半更开启了“自动攒”计划“无痛攒钱”!携程上

    2024年01月18日
    浏览(45)
  • AIGC+开放式社交,为年轻人注入了新的“Soul”?

    5月21日全国助残日,Soul App举办了一场与众不同的线上公益活动,邀请视障用户担任“见习解忧师”,诉说世界更多角落“不完美”的故事,展示人生更多可能,传递温暖与爱。 参与此次派对的“见习解忧师”都是Soul平台上充满正能量,并且拥有“野生解忧师”经历的用户。

    2024年02月11日
    浏览(29)
  • JavaScript实现背景图像切换3D动画效果

    🐱 个人主页: 不叫猫先生 🙋‍♂️ 作者简介:2022年度博客之星前端领域TOP 2,前端领域优质作者、阿里云专家博主,专注于前端各领域技术,共同学习共同进步,一起加油呀! 💫优质专栏:vue3从入门到精通、TypeScript从入门到实践 📢 资料领取:前端进阶资料以及文中源

    2023年04月20日
    浏览(40)
  • Soul CEO张璐团队以用户安全为核心,探索社交平台安全治理新路径

    “认同感”,是现代年轻人当下的核心社交需求之一,作为年轻人喜爱的新型开放式社交平台,Soul APP为年轻人们提供了一个自在表达、轻松互动的平台,为用户带来了志趣相投、精神共鸣的高质量网络连接。在Soul日活近千万的用户中,超过七成为Z世代年轻群体,如何能够为Z世代提

    2024年02月06日
    浏览(31)
  • web前端框架Javascript之JavaScript 异步编程史

    早期的 Web 应用中,与后台进行交互时,需要进行 form 表单的提交,然后在页面刷新后给用户反馈结果。在页面刷新过程中,后台会重新返回一段 HTML 代码,这段 HTML 中的大部分内容与之前页面基本相同,这势必造成了流量的浪费,而且一来一回也延长了页面的响应时间,总

    2024年02月14日
    浏览(39)
  • 01. 组建知识星球服务体系

    因为想要进行各种技术点的训练和学习,开发中需要使用各种各样的开源技术框架,苦于没有基础服务支撑,所以想要建立一个专门的服务支撑系统,每年购买的云服务器配置底下,安装一个Jenkins都跑不起来,所以自己购买了一个物理主机,内存加装到 32G ,搭建自己的私人

    2024年02月09日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包