纯css3配合vue实现微信语音播放效果

前言

每次写点东西都扯两句-0-,这几天一半精力放在移动端,一半维护之前的项目。书也少看了,不过还好依旧保持一颗学习的心。对于css3我是之前有专门整理过的,因此对于原理之前也算了解。今天是项目中遇到一个效果,来整理一下。

正文

首先我们可以找到微信的语音播放效果。这里自行打开手机微信进行查看。之前后台提起用gif动画,但是对于gif动画有两个难点:1.谁来画?(抱歉这种东西没有设计师来搞前端是不做的。)2.移动端你跟我提用gif?

很显然,必须用css3来搞。不过之前写js写的多了,发现css3有点生疏。但是基本的搜索能力还是有的。找到Loader.css看下基本布局,然后找mdn文档翻翻。基本思路就确定下来了。

先来看代码:

 <div class="cricleplay"   v-on:click="audio" status="stop" no="1">
 	 <div class="small"></div>
 	 <div class="middle stopanimate"></div>
 	 <div class="large stopanimate"></div>
 </div>

用一个cricleplay来包含,然后你看一下语法可能就明白我已经升级vue版本到1.0.8了。因为移动端不想再包含其他的库,于是写原生的js操作dom也花了蛮多时间去熟悉。。。后来发现zepto.min.js其实挺小。然后就替换了一部分。

刚开始考虑的是直接用Border来画,然后四分之一圆这样来。

然而对比一下你可以看见:

这两者非常的不像。。。

于是应该考虑如何画一个弧形,然而在google和百度上找不到。

于是直接去codepen搜索arc。

找一个类似弧形。

之后就能画出类似这种:

直接来贴成品代码:

.small{
  width: 20px;
  height: 20px;
  border-style: solid;
  border-top-color: transparent;
  border-left-color: transparent;
  border-bottom-color: transparent;
  border-radius: 50%;
  box-sizing: border-box;
  vertical-align: middle;
  display: inline-block;
  color:#A2A2A2;
}

.middle{
  width: 30px;
  height: 30px;
  border-style: solid;
  border-top-color: transparent;
  border-left-color: transparent;
  border-bottom-color: transparent;
  border-radius: 50%;
  box-sizing: border-box;
  vertical-align: middle;
  display: inline-block;
  margin-left: -22px;
  animation: show2 3s ease-in-out infinite;
  opacity: 1;
  color:#A2A2A2;
}
@keyframes show2 {
  0% { opacity: 0;}
  30% { opacity: 1;}
  100% { opacity: 0;}
}
.cricleplay{
	width: 100%;
}
.large{
  width: 40px;
  height: 40px;
  border-style: solid;
  border-top-color: transparent 大专栏  纯css3配合vue实现微信语音播放效果;
  border-left-color: transparent;
  border-bottom-color: transparent;
  border-radius: 50%;
  box-sizing: border-box;
  vertical-align: middle;
  display: inline-block;
  margin-left: -32px;
  animation: show3 3s ease-in-out infinite;
  opacity: 1;
  color:#A2A2A2;
}
@keyframes show3 {
  0% { opacity: 0;}
  60% { opacity: 1;}
  100% { opacity: 0;}
}

当然你也可以戳这里看更加直观的效果。

对于这些css3是没什么好讲的,看下代码就能直接理解思路。比较需要时间调试的是动画补间。

然后我们就获取到一个能够不断播放的语音效果。但是我们是需要能够在点击之后才播放。点击其它或者再次点击动画应该消失。因此我们可以把整个效果配上动作处理写成一个vue组件。不过我这里直接从项目中提取部分。

来看代码:

// 添加、移除、检测 className
		function hasClass(element, className) {
			var reg = new RegExp('(\s|^)'+className+'(\s|$)');
			return element.className.match(reg);
		} 

		function addClass(element, className) {
			if (!hasClass(element, className))
			{
				element.className += " "+className;
			}
		} 

		function removeClass(element, className) {
			if (hasClass(element, className)) {
				var reg = new RegExp('(\s|^)'+className+'(\s|$)');
				element.className = element.className.replace(reg,' ');
			}
		}

上面这些是我之前打算纯js处理dom的操作class的方法。

对于让infinite动画能够中途停止,尤其是在移动端。我一开始思路是添加一个class设置animation-iteration-count为0.在chrome调试的时候是可行的。然而在移动端它是不能够停止的。

因此google了一下方案。

最终采用的方案是:

.stopanimate{
		-moz-animation-name: none;
	-webkit-animation-name: none;
	-ms-animation-name: none;
		animation-name: none;
}

将动画名称给清除了。

然后很简单就是对应的动画添加样式或者删除样式

 	addClass(that.currentparent.children[1],"stopanimate");
 	addClass(that.currentparent.children[2],"stopanimate");
 	addClass(event.children[1],"stopanimate");
 	addClass(event.children[2],"stopanimate");

因为我用的是vue,在methods中处理时能获取到event,然后event中找到需要操作的类。当然你可以自己用其它方式获取。

然后就能看到如下效果:

结尾

这篇文章没多大技术含量,主要就是我自己记录下思路。

原文地址:https://www.cnblogs.com/lijianming180/p/12239943.html

时间: 2024-10-04 07:41:31

纯css3配合vue实现微信语音播放效果的相关文章

实现类似微信语音播放动画的效果

要求就是点击播放按钮,小喇叭开始动,当语音结束后,停止动画.如图: 这需要用到UIImageView的帧动画,该动画可以让一系列图片在特定的时间内按顺序显示出来.需要的素材如下: audio_icon_1 *****分割线***** audio_icon_2 *******分割线*******audio_icon_3 代码如下: // 添加播放时候的动画图片 [_audioBtn addSubview:self.animationview]; [_audioBtn setImage:[UIIma

一款纯css3实现的机器人看书动画效果

今天要给大家介绍一款纯css3实现的机器人看书动画效果.整个画面完全由css3实现的绘制,没有使用任何图片元素.机器人的眼睛使用了动画元素.我们一起看下效果图: 在线预览   源码下载 实现的代码. html代码: <div class='szene'> <div class='image i1'> < HTML > <div class='nail'> </div> </div> <div class='image i2'&g

纯CSS3实现的图片滑块程序,效果非常酷

接下来我们一起来分析一下源码,首先是HTML代码,非常简单: <div id="gal"> <nav class="galnav"> <ul> <li><input type="radio" name="btn" value="one" checked="checked" /> <label for="btn&q

纯CSS3实现的表单输入高亮效果

<!DOCTYPE html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>纯CSS3实现的联系人表单输入效果</title><!-- Import Google Font - Yanone Kaffeesatz --> <link href='http://fonts.g

基于纯 CSS3 技术实现美观的标签云效果

标签云是博客的标配功能,能够清晰的呈现博客的各个关键词和主题.在这个效果中,您将学习如何使用 CSS3 技术创建一个效果精美的标签云效果. 作为实验项目,使用了 CSS3 渐变,阴影和最重要的的 CSS 变换特性. 效果演示      源码下载 您可能感兴趣的相关文章 Web 开发中很实用的10个效果[源码下载] 精心挑选的优秀jQuery Ajax分页插件和教程 12个让人惊叹的的创意的 404 错误页面设计 让网站动起来!12款优秀的 jQuery 动画插件 十分惊艳的8个 HTML5 &

iOS 类微信语音播放之切换听筒和扬声器的方法解决方案

[[UIDevice currentDevice] setProximityMonitoringEnabled:NO];   //建议在播放之前设置yes,播放结束设置NO,这个功能是 //添加监听 self @selector(sensorStateChange:) @"UIDeviceProximityStateDidChangeNotification" nil]; //处理监听触发事件 void)sensorStateChange:(NSNotificationCenter *

纯CSS3实现不错的表单验证效果

这是补充HTML5基础知识的系列内容,其他为: 一.HTML5-- 新的结构元素 二.HTML5-- figure.time.details.mark 三.HTML5-- details活学活用 四.HTML5-- 现存元素的变化 五.HTML5 -- Web表单 今天继续学习Web表单相关的内容,不过今天重点落实到实战中,利用HTML5表单与CSS3-UI实现一款不错的表单效果. 效果可看下面动图: 如效果演示,我们今天就通过简单几行CSS就可实现. 预备知识 1.HTML5新增的表单类型:t

纯CSS3实现的8种Loading动画效果

转自赞生博客 效果如图: HTML代码部分(所有效果共用): <div class=”loader”>加载中…</div> 我们从左到右从上到下列出效果对应的CSS代码. 1#效果CSS代码: .load1 .loader,.load1 .loader:before,.load1 .loader:after {background: #FFF;-webkit-animation: load1 1s infinite ease-in-out;animation: load1 1s i

【Web前沿技术】纯 CSS3 打造的10个精美加载进度条动画

之前向大家介绍8款优秀的 jQuery 加载动画和进度条插件,今天这篇文章向大家推荐10个纯 CSS3 代码实现精美加载进度条动画效果的方案.加载动画和进度条在网站和 Web 应用中的使用非常流行,特别是在使用 Ajax 技术加载内容的应用场景中,使用时尚的加载动画和进度条告诉用户内容正在加载中是一种非常友好的方式. 您可能感兴趣的相关文章 20个非常绚丽的 CSS3 特性应用演示 23个纯 CSS3 打造的精美LOGO图案 35个让人惊讶的 CSS3 动画效果演示 推荐12个漂亮的 CSS3