DIY可视化实现仿抖音短视频代码生成器

简介: 这篇文章介绍了如何使用DIY工具创建一个兼容uniapp和微信小程序的高性能短视频展示器,具有丝滑切换、无限数据加载和流畅滑动功能,同时支持在线定制界面和API请求。

DIY可视化实现仿抖音短视频代码生成器,仿抖音短视频兼容uniapp、微信小程序 丝滑切换视频效果,无限数据加载不卡顿,高性能滑动不卡顿超流畅,观看视频丝滑切换,页面内容自定义,无限数据加载不卡顿。


在线设计请求远程数据源,绑定数据源、视频源、标题等。所有界面上的元素都支持在线自定义。


在线请求API

<template>
  <view class="container container21094">
    <view class="flex diygw-col-24">
      <swiper :current="swipersIndex" @animationfinish="playVideoFunction" class="swiper" @change="changeSwipers" indicator-color="rgba(51, 51, 51, 0.39)" indicator-active-color="rgba(64, 64, 64, 0.93)" interval="3000" vertical="true" circular="true" style="height: 100vh">
        <swiper-item v-for="(item, index) in datas.rows" :key="index" class="diygw-swiper-item">
          <view class="diygw-swiper-item-wrap">
            <view class="flex diygw-col-24">
              <video ref="refVideo" :id="'video' + index" :controls="false" :show-center-play-btn="true" :show-play-btn="false" :show-fullscreen-btn="false" :src="item.src" style="width: 100%; height: 100vh" object-fit="contain" :title="item.title" poster=""></video>
            </view>
            <view class="flex flex-wrap diygw-col-24 flex-direction-column flex-clz">
              <view class="diygw-col-24 text-clz">
                {{ item.title }}
              </view>
              <view class="diygw-col-24">
                {{ item.remark }}
              </view>
            </view>
            <view class="flex flex-wrap diygw-col-0 flex-direction-column flex1-clz">
              <view class="flex flex-wrap diygw-col-24 flex-direction-column items-center flex2-clz">
                <image :src="item.avatar" class="image8-size diygw-image diygw-col-0 image8-clz" mode="widthFix"></image>
              </view>
              <view class="flex flex-wrap diygw-col-24 flex-direction-column items-center flex5-clz" @tap="navigateTo" data-type="tip" data-tip="触发收藏">
                <text class="flex icon3 diygw-col-0 diy-icon-star"></text>
                <view class="diygw-col-0">
                  {{ item.star }}
                </view>
              </view>
              <view class="flex flex-wrap diygw-col-24 flex-direction-column items-center flex3-clz" @tap="navigateTo" data-type="tip" data-tip="触发消息">
                <text class="flex icon1 diygw-col-0 diy-icon-message"></text>
                <view class="diygw-col-0">
                  {{ item.comment }}
                </view>
              </view>
              <view class="flex flex-wrap diygw-col-24 flex-direction-column items-center flex4-clz" @tap="navigateTo" data-type="tip" data-tip="触发分享">
                <text class="flex icon2 diygw-col-0 diy-icon-share"></text>
                <view class="diygw-col-0">
                  {{ item.share }}
                </view>
              </view>
            </view>
          </view>
        </swiper-item>
      </swiper>
    </view>
    <view class="clearfix"></view>
  </view>
</template>
 
<script>
  export default {
    data() {
      return {
        //用户全局信息
        userInfo: {},
        //页面传参
        globalOption: {},
        //自定义全局变量
        globalData: {},
        datas: {
          code: 0,
          msg: '',
          rows: [
            {
              title: '',
              remark: '',
              share: '',
              comment: '',
              star: '',
              src: '',
              avatar: ''
            }
          ]
        },
        showVideo: false,
        swipersIndex: 0
      };
    },
    onShow() {
      this.setCurrentPage(this);
    },
    onLoad(option) {
      this.setCurrentPage(this);
      if (option) {
        this.setData({
          globalOption: this.getOption(option)
        });
      }
 
      this.init();
    },
    methods: {
      async init() {
        await this.datasApi();
      },
      // 获取视频接口 API请求方法
      async datasApi(param) {
        let thiz = this;
        param = param || {};
 
        //请求地址及请求数据,可以在加载前执行上面增加自己的代码逻辑
        let http_url = 'https://php.diygw.com/video.php';
        let http_data = {};
        let http_header = {};
 
        let datas = await this.$http.post(http_url, http_data, http_header, 'json');
 
        this.datas = datas;
        this.showVideo = true;
        this.$nextTick(() => {
          this.playVideoFunction({});
        });
      },
 
      // 播放视频 自定义方法
      async playVideoFunction(param) {
        let thiz = this;
        let swipersIndex = this.swipersIndex;
        if (param.detail) {
          swipersIndex = param.detail.current;
        }
        let currentId = 'video' + swipersIndex; // 获取当前视频id
        this.videoContent = uni.createVideoContext(currentId, thiz).play();
        // 获取视频列表
        let rows = this.datas.rows;
        rows.forEach((item, index) => {
          // 获取json对象并遍历, 停止非当前视频
          if (item.src != null && item.src != '') {
            let temp = 'video' + index;
            if (temp != currentId) {
              // 暂停其余视频
              uni.createVideoContext(temp, thiz).pause(); //暂停视频播放事件
            }
          }
        });
      },
      changeSwipers(evt) {
        let swipersIndex = evt.detail.current;
        this.setData({ swipersIndex });
      }
    }
  };
</script>
 
<style lang="scss" scoped>
  .flex-clz {
    padding-top: 20rpx;
    color: #ffffff;
    left: 0rpx;
    bottom: 0rpx;
    padding-left: 20rpx;
    padding-bottom: 20rpx;
    position: absolute;
    padding-right: 20rpx;
  }
  .text-clz {
    font-weight: bold;
    font-size: 28rpx !important;
  }
  .flex1-clz {
    padding-top: 20rpx;
    color: #ffffff;
    bottom: 200rpx;
    padding-left: 20rpx;
    padding-bottom: 20rpx;
    position: absolute;
    right: 0rpx;
    padding-right: 20rpx;
  }
  .flex2-clz {
    margin-left: 10rpx;
    width: calc(100% - 10rpx - 10rpx) !important;
    margin-top: 10rpx;
    margin-bottom: 10rpx;
    margin-right: 10rpx;
  }
  .image8-clz {
    border-bottom-left-radius: 120rpx;
    overflow: hidden;
    border-top-left-radius: 120rpx;
    border-top-right-radius: 120rpx;
    border-bottom-right-radius: 120rpx;
  }
  .image8-size {
    height: 96rpx !important;
    width: 96rpx !important;
  }
  .flex5-clz {
    margin-left: 10rpx;
    width: calc(100% - 10rpx - 10rpx) !important;
    margin-top: 10rpx;
    margin-bottom: 10rpx;
    margin-right: 10rpx;
  }
  .icon3 {
    font-size: 56rpx;
  }
  .flex3-clz {
    margin-left: 10rpx;
    width: calc(100% - 10rpx - 10rpx) !important;
    margin-top: 10rpx;
    margin-bottom: 10rpx;
    margin-right: 10rpx;
  }
  .icon1 {
    font-size: 56rpx;
  }
  .flex4-clz {
    margin-left: 10rpx;
    width: calc(100% - 10rpx - 10rpx) !important;
    margin-top: 10rpx;
    margin-bottom: 10rpx;
    margin-right: 10rpx;
  }
  .icon2 {
    font-size: 56rpx;
  }
  .container21094 {
    padding-left: 0px;
    padding-right: 0px;
    background-color: #000000;
  }
</style>


目录
相关文章
|
数据采集 小程序 Python
搞定短视频!批量下载快手视频(附源码)
相信大家都接触了短视频平台,比如某音、某手等平台,竟然大家都熟悉了,那么今天辰哥分享的技术是:在某手上搜索视频,并实现下载!
1209 0
|
5月前
|
小程序
婚纱摄影店铺微信小程序源码
婚纱摄影店铺微信小程序源码
51 2
|
4月前
|
开发工具 开发者
如何用 CocosCreator 对接抖音小游戏的侧边栏复访
最近小游戏的软著下来了,用 CocosCreator 做的游戏也完成了 1.0 版本。而当我打包成抖音小游戏进行提交时,还没到初审就给拒了,因为还有一个机审,机器检测到代码中没有接入 “侧边栏复访功能”。这个我还真不知道,那只能去官方看文档了,位置是小游戏开发文档 -> 指南 -> 开放能力 -> 侧边栏能力。
50 2
|
前端开发
移动端开发——京东首页制作(流式布局)
移动端开发——京东首页制作(流式布局)
|
搜索推荐 小程序 数据挖掘
仿今日头条实时新闻微信小程序项目源码
仿今日头条实时新闻微信小程序项目源码
405 0
仿今日头条实时新闻微信小程序项目源码
|
前端开发
移动端支付界面制作(小兔鲜项目)
移动端支付界面制作(小兔鲜项目)
217 0
移动端支付界面制作(小兔鲜项目)
|
移动开发 Android开发 iOS开发
html5直播实例|h5仿陌陌、仿火山小视频
这段时间直播、小视频比较火,于是空余时间利用h5开发的仿陌陌、抖音、火山小视频项目,使用到了html5+css3+jQuery+iscroll+swiper+wlsPop+wcMsgTips等技术架构开发,界面功能效果挺不错哒!!!                
4603 0
仿抖音“我的”界面设计图制作
最近在做一个仿抖音的APP(萌音)前一段时间将主页完成接下来打算做一下我的界面,然后今天就把设计图先做出来了,因为个人毕竟能力有限所以相对于抖音的界面我自己制作的界面做了一些改动 仿抖音“我的”界面设计图 附上psd源文件感兴趣的同学可以看看 个人博客https://myml666.
1860 0
|
JavaScript 前端开发
仿抖音短视频系统源码,点击实现波纹效果
仿抖音短视频系统源码,点击实现波纹效果
1867 0
仿今日头条项目架构
仿今日头条项目架构 (一)—— ios11导航栏和tabBar层级仿今日头条项目架构 (二)—— 项目主架构的搭建仿今日头条项目架构 (三)—— 导航栏的自定义实现仿今日头条项目架构 (四)—— 首页父子控制器频道切换的集成 ...
1597 0