小程序练习,仿bilibili小程序

微信小程序学习  仿哔哩哔哩制作的小程序(待完善)

项目预览图

image

小程序?大改变?

之前就被朋友安利使用小程序,最近接近了小程序,发现了它竟然带来了一场“大革命”。
简单说,它就是一个可以实现之前只能是原生态APP可以实现的效果和功能。比如说,一些酷炫的页面与转场,一些可以直接和手机硬件交互的功能,录音啊,拍视频啊,调用手机的重力感应啊,GPS啊等等。
专业点来说,是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用。
小程序的轻量化带来了app所不具有的许多优点,它同时也在向着我们的日常app“宣战”,这场战争花落谁家,就让我们拭目以待吧。

制作简单?

小程序作为一颗冉冉升起的新星,他之所以能被大家接受,不仅仅是因为他的轻量化,脱去了app的繁重外壳,还因为他很容易上手。在经过几天时间去熟悉小程序的构建和说明文档等,我这种初学者也能慢慢地摸到小程序的门槛,进入小程序这个新世界,完成自己的构思。

我们能做什么?

作为一个二次元爱好者(别看着我,我当然不是死宅(ノ=Д=)ノ┻━┻),使用最多的app当然就是我大b站了(哔哩哔哩 (゜-゜)つロ 干杯~-bilibili),所以应着自己的爱好,尝试着制作了一个哔哩哔哩的小程序,途中简直是经历了千难万险,最后因为能力问题只是制作了一个半成品,尚有很多功能尚未实现,但是我是有梦想的人,之后还是要多学习,将它慢慢完善,这次就当交流,大家互相学习(。ò ∀ ó。)

项目工具及文档

  1. 微信web开发者工具:微信小程序官网 微信开发的小程序编辑软件,下载安装即可使用;
  2. 开发文档:微信小程序宝典秘籍 这里面详细的介绍了小程序的各种信息,包括组件、框架、API等等,有很多值得我们去阅读的信息;
  3. 图标库: Iconfont-阿里巴巴矢量图标库 这个是网站简直是神器,什么图标都能找到,我很喜欢。

目录结构

├── app.js
├── app.json
├── app.wxss
├── utils
│   └── util.js
├── pages
│   ├── common
│   │   ├── header.wxml
│   │   └── item.wxml
│   ├── index
│   │   ├── index.js
│   │   ├── index.wxml
│   │   └── index.wxss
│   ├── selectColor
│   │   ├── selectColor.js
│   │   ├── selectColor.wxml
│   │   └── selectColor.wxss
│   ├── play
│   │   ├── play.js
│   │   ├── play.json
│   │   ├── play.wxml
│   │   └── play.wxss
└── resources
    └── images
    
页面注册
app.json
    "pages":[
        "pages/index/index",
        "pages/play/play",    
        "pages/selectColor/selectColor"
      ],

项目功能

已实现功能:
  • 广告轮播图
  • 视频播放
  • 弹幕功能
  • 弹窗功能
  • 分享功能
未实现功能:

这个有点多。。。毕竟是我大B站,目前只实现了一些力所能及的功能,以后会完善的。

部分功能实现

顶部导航栏
       <scroll-view class="scroll-view_H" scroll-x="true" style="width: 100%">
         <text wx:for="{{section}}" wx:key="id" id="{{item.id}}" catchtap="handleTap"
               class="nav-name {{item.id == currentId ? 'nav-hover' : ''}}"
               style=" padding-right:{{topdistance}}px;padding-left:{{topdistance}}px">{{item.name}}</text>
       </scroll-view>
     </view>
   </view>
   <block wx:if="{{currentId == 1001}}">
   <view class="slider-wrapper">
   <swiper indicator-dots="{{indicatorDots}}" autoplay="{{autoplay}}"
      interval="{{interval}}" duration="{{duration}}" indicator-active-color="#EA6CAF">
         <block wx:for="{{imgUrls}}">
           <swiper-item>
              <navigator url="{{item.link}}" hover-class="navigator-hover">
               <image src="{{item.url}}" class="slide-image" width="355" height="150" />
              </navigator>
           </swiper-item>
         </block>
   </swiper>
 </view>
 onLoad: function (options) {
    // 页面初始化 options为页面跳转所带来的参数
    this.setTopDistance();
    this.setData({
      stagePoint: util.stagePoint()
    })
    if (this.data.currentId == 1001) {
      this.Page();
    }
    else if (this.data.currentId == 1004) {
      this.channelPage();
    }
    else if (this.data.currentId == 1003) {
      this.livePage();
    }
  }

顶部导航栏实际就是利用scroll-view控件,给他绑定当前页面的id,当触发点击事件时,加载与该id匹配的信息。要注意的是一开始要给currentId一个页面的值,不然无法显示出来。

弹幕功能

小程序本身具备弹幕功能,阅读api,对着原版代码进行了一些改变,实现了弹幕自己选择颜色,并且将弹幕和弹出层结合在一起使用。

Page({
  inputValue: '',
  data: {
    isRandomColor: true,
    src: '',
    numberColor: "#ff0000",
    danmuList: [{
      text: '这波不亏呀',
      color: '#ff0000',
      time: 1
    }, {
      text: '大神666',
      color: '#00ff00',
      time: 2
    },
    {
      text: '今生无悔入fate',
      color: '#D9D919',
      time: 3
    },
    {
      text: '吾王赛高(。ò ∀ ó。)',
      color: '#C0D9D9',
      time: 4
    }
    ],
    showModalStatus: false
  },
  powerDrawer: function (e) {
    var currentStatu = e.currentTarget.dataset.statu;
    this.util(currentStatu)
  },
  util: function (currentStatu) {
    /* 动画部分 */
    // 第1步:创建动画实例 
    var animation = wx.createAnimation({
      duration: 200, //动画时长 
      timingFunction: "linear", //线性 
      delay: 0 //0则不延迟 
    });

    // 第2步:这个动画实例赋给当前的动画实例 
    this.animation = animation;

    // 第3步:执行第一组动画:Y轴偏移240px后(盒子高度是240px),停 
    animation.translateY(240).step();

    // 第4步:导出动画对象赋给数据对象储存 
    this.setData({
      animationData: animation.export()
    })

    // 第5步:设置定时器到指定时候后,执行第二组动画 
    setTimeout(function () {
      // 执行第二组动画:Y轴不偏移,停 
      animation.translateY(0).step()
      // 给数据对象储存的第一组动画,更替为执行完第二组动画的动画对象 
      this.setData({
        animationData: animation
      })

      //关闭抽屉 
      if (currentStatu == "close") {
        wx.createVideoContext('myVideo').play();
        this.setData(
          {
            showModalStatus: false,
          }
        );
      }
    }.bind(this), 200)

    // 显示抽屉 
    if (currentStatu == "open") {
      wx.createVideoContext('myVideo').pause();
      this.setData(
        {
          showModalStatus: true
        }
      );
    }
  },
  onLoad: function onLoad() {
    var _this = this;
    wx.getSystemInfo({
      success: function success(res) {
        // video标签默认宽度300px、高度225px
        var windowWidth = res.windowWidth;
        var videoHeight = 225 / 300 * windowWidth;
        _this.setData({
          videoWidth: windowWidth,
          videoHeight: videoHeight
        });
      }
    });
  },
  onReady: function onReady(res) {
    this.videoContext = wx.createVideoContext('myVideo');
  },
  onShow: function onShow() {
    var _this = this;
    wx.getStorage({
      key: 'numberColor',
      success: function success(res) {
        _this.setData({
          numberColor: res.data
        });
      }
    });
  },
  bindInputBlur: function (e) {
    this.inputValue = e.detail.value;
  }
  }
})

参考了开源代码后,发现弹幕其实就是对字进行动画效果,沿着y轴滚动出现,利用计时器不停播放多组动画,抽屉效果也就是对遮罩层的利用,然后利用动画效果,将弹出栏显示出来,在制作时,记得让视频暂停,这样才能给用户一个好的体验,毕竟没有人想错过一部精彩的视频( ̄y▽ ̄)~

分享功能

其实也是对api的一种利用,(这里强调一下,api真的很重要,喜欢大家好好阅读),微信小程序也是前段时间才可以通过按钮实现分享功能。

onShareAppMessage: function onShareAppMessage() {
    wx.createVideoContext('myVideo').pause();
    return {
      title: '【Fate全系列】英灵乱斗: 夺回未来的战争「Grand Order」',
      desc: '【Fate全系列】英灵乱斗: 夺回未来的战争「Grand Order」',
      path: '/pages/play/play',
      success: function (res) {
        // 转发成功
        wx.showToast({
          title: '成功',
          icon: 'succes',
          duration: 1000,
          mask: true
        })
          wx.createVideoContext('myVideo').play();       
      },
      fail: function (res) {
        // 转发失败
        wx.showToast({
          title: '失败',
          icon: 'fail',
          duration: 1000,
          mask: true
        })
          wx.createVideoContext('myVideo').play();
      }
    }
  }

 这是我的写法,下面给出api内容,可以根据不同人的想法进行修改。

分享api格式
 onShareAppMessage: function () {
   return {
     title: '自定义分享标题',
     path: '/page/user?id=123'
   }
 }

但是这个id很多人不明白是什么id,之前我也不明白,后来发现这个id就是你要分享的这篇文章的id,但是一定要注意异步与同步的问题。

踩过的坑<(`^´)>

1.微信小程序的编译包是不能超过2M的,一开始放了一大堆的本地图片,结果打包的时候,告诉我太大了,无奈下想办法将图片上传到云端,将图片链接化;
2.再次强调,小程序api很重要,里面包含了很多知识,我的弹幕功能也是后来查找时发现了api,这可以让我们少走很多弯路;
3.重要的事情说三遍,页面内跳转不能超过5级,页面内跳转不能超过5级,页面内跳转不能超过5级。_(:з」∠)_

项目地址

https://github.com/wuyangshu/...

最后要说的话

现在的自己技术还是有些不太成熟,接触小程序不久,还有很多需要学习的地方,不能很好的重现哔哩哔哩的功能,不过作为一个学生,还有很长的学习之路要走。
最后希望能得到各位在求学路上同行的小伙伴的小星星⭐,谢谢(´∀`)♡

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【为什么学习微信小程序?】   小程序开发为当下一种主流的开发形式,小程序开发已经不仅仅局限于互联网行业,传统行业同样也有海量的需求,掌握小程序开发不仅仅是掌握了一个新的开发技能,更可以增加大家的行业竞争力,无论是在岗位的提升,求职面试、或者个人创业都是有很大的帮助。掌握了小程序开发小程序也是一门相对比较容易上手的技术,因为小程序开发容纳了前端、后端、运维等岗位所需掌握的知识但又极为简单好理解,对于刚刚入门或者小白用户是一个可以快速掌握并成为一名程序猿的不二途径。 【推荐你学习这门课程的四大亮点】 1、完整成体系的小程序开发知识: 对于没有学习过小程序开发的同学,本课程由浅入深系统的向同学们讲解了小程序开发知识,将知识点串联起来,让同学们可以更好更快的掌握小程序开发。2、视频及相关功能开发的掌握: 借助于小程序开发使得视频方向的开发变的尤为简单,即使你是入门小白也可以熟练掌握小程序中视频的相关开发,其中涉及了视频的常规控制如播放暂停等也有比较流行的视频弹幕功能,并结合了一下视频开发中相关的性能优化问题,可以让同学们通过本课程的学习对于视频类的开发有更深层次的认识。3、打造智能闲聊小程序: 借助于网络上开放的人工智能接口,去实现智能闲聊功能,使得开发的过程不仅能够收获更多的知识也变得更加有趣。项目中虽然知识讲解了智能闲聊功能的调用,但是通过此功能的调用方法大家可以举一反三去使用更多的开发功能使得开发变得简单且有趣。4、掌握项目级开发知识及技巧: 本课程中融入了两大当前比较主流的项目实例,视频功能和人工智能。通过项目的练习不仅可以让大家掌握较为主流的项目方向且融入很多的中高级语法及项目开发知识,如ES6+的一些语法和模块化、组件化开发的知识。【课程内容设计】   设计本门课程时考虑到很多同学可能没有小程序开发相关经验,本门课程将由浅入深,渐进式的讲解知识点。我把课程分为了三个阶段分别为:初次接触、基础入门、实战提升。   1、初次接触:   主要给大家讲解小程序开发的相关知识,让大家在宏观上对向程序开发能有一定的概念。并且讲授的开发环境的搭建让大家对在开发前期做一个充分的热身。先激发起大家对线程序开发的热情,这样为下一步小程序的开发学习做一个铺垫。   2、基础入门:   这个阶段主要为入门的同学提供了一个比较全面的小程序开发基础知识知识汇总,并伴有实践的例子简单且易上手,让大家能够体验到小程序的开发乐趣,并未下一步的项目实战开发打定基础。   3、实战提升:   这个阶段为项目实践阶段,通过实战项目让大家深入了解和学习小程序开发,项目中同时融入了现在主流的视频内容,和有趣并贴近生活的智能闲聊功能,项目中涉及到的技术点也是由浅入深,同学们在掌握小程序的开发能力的同时也掌握了问题解决与深入学习的能力。 【实战项目展示】 【学习完课程你将收获】
### 回答1: Uniapp是一种跨平台开发框架,可以让开发者在同一代码库中开发出iOS、Android、H5等多个平台的应用程序。而仿Bilibili则是一个非常有趣、且挑战性很大的开发方向。 首先,需要考虑到Bilibili是一个功能非常丰富的移动应用,包含了很多独特的功能,比如弹幕、评论、动态、番剧、直播等等。因此,在仿Bilibili时,需要对其核心功能进行分析和思考,找出其实现方式并尝试将其迁移到Uniapp框架中。同时,Uniapp框架提供了一系列组件库和工具,可以使开发者在开发过程中更加方便快捷。 其次,为了提升用户体验和增加互动性,可以考虑引入一些优秀的第三方库和技术,比如视频播放器库、音频处理库、图像处理库、社交分享库、弹幕库等等,以此实现更加丰富、复杂、高效的应用程序。 最后,在开发仿Bilibili应用时,需要注意用户体验和应用性能的细节,比如页面加载速度、卡顿等问题,并尝试寻求解决方案。另外,移动应用不同于web应用,需要对不同的平台进行适配和优化,以保证应用在不同平台上的稳定性和流畅性。 综上所述,仿Bilibili的Uniapp开发工作具有丰富性、挑战性和创造性,对开发者的前端技术要求较高,也需要良好的沟通和团队协作能力。如果能够达成所预期的效果,将极大地提升开发者的技术实力和市场竞争力。 ### 回答2: Bilibili是一家以动漫、游戏和音乐为主题的在线视频网站,也是中国年轻人文化的代表。通过Uniapp仿Bilibili,可以让用户在移动端快速、方便地访问Bilibili的相关内容,提高用户的体验和便利性。 首先,需要进行设计。需要根据Bilibili的风格和特点设计Uniapp,包括色彩、图标、交互和UI界面等,以让用户有一种熟悉感和舒适感。 然后,需要进行开发。Uniapp是一个跨平台开发工具,兼容iOS和Andriod等多个平台,通过组件化和模块化开发,可以提高开发效率。需要将Bilibili的相关功能转化为组件和页面,实现类似Bilibili的浏览、搜索、播放、评论等功能。在开发过程中需要注意UI和交互体验,并且保证数据的准确性和安全性。 接下来考虑如何实现内容的更新和推荐。可以在考虑用户观看历史记录和行为,从而向用户推荐类似的内容;也可以实现热门内容和强烈推荐等功能。 最后需要考虑用户的反馈和意见。通过用户反馈和意见,进行后续的功能改进和优化,提高用户的满意度和使用体验。 总之,Uniapp仿Bilibili需要进行设计、开发和优化等多个方面的考虑,按照用户需求和口味,实现相应的功能和体验,最终达到提高用户满意度和便利性的目的。 ### 回答3: 最近,很多程序员都在使用uniapp来仿bilibili这样的视频分享软件。uniapp是一款基于Vue.js的轻量级跨平台开发框架,可以同时在多个平台发布移动应用,例如iOS、Android、H5以及小程序等等。通过uniapp,我们可以快速地开发出一个类似bilibili的应用程序。 为了仿bilibili,我们需要考虑哪些功能是该应用程序的重点。首先,我们需要一个强大的视频播放器,能够支持多种分辨率和视频格式,例如FLV和HLS。其次,我们需要一个强大的视频上传系统,让用户可以上传自己的视频和评论。此外,我们还需要一个完善的社交系统,让用户可以互相关注,私信和分享他们最喜爱的视频。 要实现这些功能,我们可以运用uniapp内置的许多组件和插件。例如,我们可以使用uni-icon组件来显示图标,使用uni-list组件来显示视频列表。我们也可以使用uni-upload组件来上传用户视频,并使用uni-comments组件让用户评论视频。另外,我们可以使用uni-social-share组件来让用户分享他们喜欢的视频到其他社交媒体平台上。 总的来说,uniapp是一个非常强大和灵活的开发框架,可以为我们开发一款高质量的仿bilibili应用提供支持。借助uniapp,我们可以快速地实现所有必要的功能,并在多个平台上发布我们的应用程序。当然,我们还需要投入足够的时间和精力来进行开发和测试,以确保我们的应用程序能够吸引用户并获得成功。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值