前言

每次写点东西都扯两句-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中找到需要操作的类。当然你可以自己用其它方式获取。

然后就能看到如下效果:

结尾

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

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

  1. html5的audio实现高仿微信语音播放效果

    效果图 前台大体呈现效果图如下: 点击就可以播放mp3格式的录音.点击另外一个录音,当前录音停止! 思路 关于播放动画,这个很简单,我们可以用css3的逐帧动画来实现.关于逐帧动画,我之前的文章也写过 ...

  2. html5的audio实现高仿微信语音播放效果(实际项目)

    HTML部分: <div class="tab-pane fade dialog-record" id="dialogRecord"> <vo ...

  3. html5的audio实现高仿微信语音播放效果Demo

    HTML部分: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <t ...

  4. js模仿微信语音播放的小功能

    自己写的一个模仿微信语音播放的小功能,实现的主要功能是:点击播放,点击暂停,播放切换,,,  代码如下: <!DOCTYPE html> <html lang="en&qu ...

  5. 纯css3圆形从中心向四周扩散动画效果

    查看效果:http://hovertree.com/texiao/css3/37/ 先来个简单的示例,例如: @keyframes hovertreemove{from {top:30px;}to { ...

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

    标签云是博客的标配功能,能够清晰的呈现博客的各个关键词和主题.在这个效果中,您将学习如何使用 CSS3 技术创建一个效果精美的标签云效果. 作为实验项目,使用了 CSS3 渐变,阴影和最重要的的 CS ...

  7. 纯css3写的仿真图书翻页效果

    对css3研究越深入,越觉得惊艳.css3说不上是万能的,但是它能实现的效果也超出了我的想象.它的高效率和动画效果的流畅性很多情况下能替代js的作用.个人习惯css3能实现的效果就不会用js,虽然在国 ...

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

    今天要给大家介绍一款纯css3实现的机器人看书动画效果.整个画面完全由css3实现的绘制,没有使用任何图片元素.机器人的眼睛使用了动画元素.我们一起看下效果图: 在线预览   源码下载 实现的代码. ...

  9. js仿微信语音播放

    html结构如下: <div class="app-voice-you" voiceSrc="xx.mp3"> <img class=&quo ...

随机推荐

  1. Python笔记_第三篇_面向对象_2.构造函数和析构函数(含self说明)

    1. 构造函数: 为什么要有构造函数? 打一个比方:类的创建就是好比你创建了好了一种格式的房间,你租给上一个住户的后,里面会对方很多“垃圾”和不规则的物品摆放.构造函数就是下一个住户再使用的时候进行物 ...

  2. 1.linux系统调优

    首先来说调优是一门黑色艺术,使用来满足人的感知,通过人的感觉来进行配置,达到让人感觉操作系统速度很块的感觉. 操作系统拥有四个瓶颈:cpu,内存,网络,磁盘.调优主要是对上述四个子系统进行配置优化,其 ...

  3. 吴裕雄--天生自然TensorFlow高层封装:解决ImportError: cannot import name 'tf_utils'

    将原来版本的keras卸载了,再安装2.1.5版本的keras就可以了.

  4. 爬虫笔记(十三)——lxml库的使用

    HTML示例代码: text = ''' <div> <ul> <li class="item-0"><a href="link ...

  5. P1010 幂次方 P1022 计算器的改良

    P1010 幂次方 一.题目 https://www.luogu.org/problemnew/show/P1010 二.代码 #include<bits/stdc++.h> using ...

  6. OAuth 2.0安全案例回顾

    转载自:http://www.360doc.com/content/14/0311/22/834950_359713295.shtml 0x00 背景 纵观账号互通发展史,可以发现OAuth比起其它协 ...

  7. Ret2shellcode

    利用原理 ret2shellcode,即控制程序执行 shellcode 代码.一般来说,shellcode 需要我们自己填充.这其实是另外一种典型的利用方法,即此时我们需要自己去填充一些可执行的代码 ...

  8. CentOS下图形界面安装_Orcaale 11g

    1.安装说明 使用到的工具: 软件名称 版本 软件包 系统 centOS6.8 CentOS-6.8-x86_64-bin-DVD1.iso 数据库 ORACLE11g linux.x64_11gR2 ...

  9. Spring Boot 2.x 整合 Redis最佳实践

    一.前言 在前面的几篇文章中简单的总结了一下Redis相关的知识.本章主要讲解一下 Spring Boot 2.0 整合 Redis.Jedis 和 Lettuce 是 Java 操作 Redis 的 ...

  10. 吴裕雄--天生自然python学习笔记:python 用pygame模块动画一让图片动起来

    动画是游戏开发中不可或缺的要素,游戏中的角色只有动起来才会拥有“生命”, 但动画处理也是最让游戏开发者头痛的部分.Pygame 包通过不断重新绘制绘图窗口,短短几行代码就可以让图片动起来! 动画处理程 ...