首页 > 其他分享 >vue + uniapp实现手机横屏弹幕

vue + uniapp实现手机横屏弹幕

时间:2023-01-05 12:11:06浏览次数:35  
标签:3px uniapp vue 100% width barrage 5px 弹幕

小程序,手持弹幕,输入文字之后,弹幕从右往左匀速划过,再次循环。

image

实现这个功能,首先建一个uniapp项目,建一个vue页面

<template>
	<view class="danmu_bg">
		<view class="barrage-box" @click="hideBottom">
			<view class="text">{{barrage}}</view>
		</view>


		<view class="bottmm_barrage_send" v-if="!isLocked">
			<view class="unlock" @click="lock">
				<image :src="unlockImgSrc" mode=""></image>
			</view>
			<view class="barrage_input">
				<input type="text" placeholder="哈喽!" @input="changeBarrageText" v-model="inputValue">
			</view>
		</view>
		<view class="bottom_barrage_locked" v-else @click="unlock">
			<uni-icons type="locked-filled" size="30" color="#fff"></uni-icons>
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				clickCount: 0, // 点击屏幕的次数
				barrage: '哈喽!', // 手机屏幕的弹幕
				isLocked: false, // 是否锁住了弹幕发送区
				unlockImgSrc: '../../static/img/icons/unlock.png', // unlock图标地址
				inputValue: '', // 输入框中的值
			};
		},
		onLoad() {
			// 加载分享菜单
			this.loadingShareMenu();
		},
		methods: {
			// 点击屏幕,底部消失或出现
			hideBottom(){
				this.clickCount++;
				if(this.clickCount % 2 === 1){
					// 奇数,底部消失
					this.isLocked = true;
				}else{
					// 偶数,底部出现
					this.isLocked = false;
				}
			},
			
			// 输入弹幕内容时,实时改变弹幕
			changeBarrageText(){
				this.barrage = this.inputValue;
			},
			
			// 点击unlock图标,控制输入框消失
			lock(){
				this.isLocked = true;
			},
			
			// 点击lock锁图标,控制输入框显示
			unlock(){
				this.isLocked = false;
			},
			
			// 加载分享菜单
			loadingShareMenu() {
				wx.showShareMenu({
					withShareTicket: true,
					//设置下方的Menus菜单,才能够让发送给朋友与分享到朋友圈两个按钮可以点击
					menus: ["shareAppMessage", "shareTimeline"]
				})
			},
		}
	}
</script>

<style lang="less" scoped>
	.danmu_bg {
		width: 100%;
		min-height: 100vh;
		background-color: #000;

		.barrage-box {
			width: 100vh;
			height: 100vw;
			transform-origin: 50vw 50vw;
			transform: rotate(90deg);
			white-space: nowrap;
			display: flex;
			justify-content: center;
			align-items: center;
			background-color: #000;
			overflow: hidden;
			animation: aniShake 0.5s linear infinite;
			
			/* 抖动字幕效果 */
			@keyframes aniShake {
			
				0%,
				33% {
					text-shadow: 3px -3px 0px #FE008E, -5px 5px 0px #00FFFF;
				}
			
				34%,
				66% {
					text-shadow: 5px -5px 0px #FE008E, -3px 3px 0px #00FFFF;
				}
			
				67%,
				100% {
					text-shadow: 3px -3px 0px #00FFFF, -5px 5px 0px #FE008E;
				}
			}

			.text {
				width: 100%;
				font-size: 100px;
				color: #FFF;
				animation: aniMove 4s linear infinite;
				animation-fill-mode: forwards;
			}
			
			/* 文字滚动 */
			@keyframes aniMove {
				0% {
					transform: translateX(100%);
				}
			
				100% {
					transform: translateX(-100%);
				}
			}
		}
		
		.bottmm_barrage_send{
			width: 100%;
			height: 50px;
			position: absolute;
			left: 0;
			bottom: 0;
			background-color: #FFF;
			display: flex;
			justify-content: space-evenly;
			border-radius: 5px;
			align-items: center;
			.unlock{
				width: 7%;
				image{
					width: 20px;
					height: 20px;
				}
			}
			.barrage_input{
				width: 80%;
				input{
					height: 40px;
					background-color: #f1f1f1;
					border-radius: 8px;
					padding-left: 10px;
				}
			}
		}
		
		.bottom_barrage_locked{
			width: 30px;
			height: 30px;
			position: absolute;
			left: 20px;
			bottom: 20px;
		}
		
	}
</style>

依托于css 动画过渡

标签:3px,uniapp,vue,100%,width,barrage,5px,弹幕
From: https://www.cnblogs.com/Fantasyfzg/p/17027173.html

相关文章

  • 在vue中watch和created哪个先执行?
      官网的生命周期图中,initreactivity是晚于beforeCreate但是早于created的。watch加了immediate:true,应当同initreactivity周期一同执行,会早于created执行。而正常......
  • vue2 vue3 禁用F12控制台 打印渲染新内容 禁用右键等
    constdisabled=()=>{//console.log('禁止脚本,运行成功');constconfig={rightKey:false,//是否开启右键菜单controller:fal......
  • vue面试考察知识点全梳理
    一、简介vue几个核心思想:数据驱动组件化虚拟dom、diff局部最优更新源码目录介绍Vue.js的源码在src目录下,其目录结构如下。src├──compiler#编译......
  • 校招前端一面必会vue面试题指南
    写过自定义指令吗?原理是什么回答范例Vue有一组默认指令,比如v-model或v-for,同时Vue也允许用户注册自定义指令来扩展Vue能力自定义指令主要完成一些可复用低层级DOM操......
  • uniapp + vue 实现色弱测试小游戏
    最终的效果:点击色块中不同的色块,跳到下一关准备一些静态数据,放到js目录下,在vue文件中引入即可//在1到比1大的任意整数之间随机取一个整数exportconstgetRandom......
  • Vue3中操作子组件实例
    子组件Child.vue<template><hr/>{{INFO}}<hr/><button@click="changeInfo">changeInfo</button></template><scriptsetuplang="ts">import{ref,r......
  • vue本地头像实时更新
    代码template<divclass="form-group"><p><labelfor="avatar"><img:src="imageUrl"alt=""id="img"ref="img"style="width:100%;"></l......
  • Vue的生命周期
    1.beforeCreate:无法通过vm,访问data,和methods。2.created:可以通vm,访问data和methods的方法。3.beforeMount:(1).生成未经vue编译的DOM结构,        ......
  • 基于vue+Element Table 表格的封装
    项目场景:项目场景:需要频繁使用列表进行呈现数据,不可能每次都写一个表格,可以将表格封装为一个组件,在需要使用时可以直接调用。效果展示:项目结构:具体实现:Table.vue......
  • Vue项目创建
    一、创建项目1.安装淘宝镜像npmi-gcnpm--registry=https://registry.npm.taobao.org2.安装vue的脚手架工具npmi-gvue-cli3.测试vue-V4.初始化包结构vuein......