IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> vue3.0 安卓和ios h5 移动端音频自定义圆环可拖拽播放(兼容微信浏览器) -> 正文阅读

[移动开发]vue3.0 安卓和ios h5 移动端音频自定义圆环可拖拽播放(兼容微信浏览器)

安装? npm install weixin-js-sdk

引入

import wx from 'weixin-js-sdk'

<template>

? ? <div class="circle_box">

? ? ? ? <div id="content"></div>

? ? ? ? ?<img class="img_0" src="https://img.yzcdn.cn/vant/cat.jpeg" alt="">

? ? ? ? ?<img @click="changeType" class="img_1" v-show="playbool" src="@/assets/decompression/pressure_audio_play.png" alt="">

? ? ? ? ?<img @click="changeType" class="img_1" v-show="!playbool" src="@/assets/decompression/pressure_audio_pause.png" alt="">

? ? ? ? ?<div v-show="false">

? ? ? ? ? ? <audio ref="audio" controls @timeupdate="updateTime">

? ? ? ? ? ? ?<source src="@/assets/decompression/tiankong.mp3" type="audio/mpeg">

? ? ? ? ? ? </audio>

? ? ? ? ?</div>

? ? </div>

</template>

<script>

import wx from "weixin-js-sdk";

export default {

? ? data(){

? ? ? ? return{

? ? ? ? ? ? value:'',

? ? ? ? ? ? outColor:'',

? ? ? ? ? ? playbool:true,

? ? ? ? ? ? second:0,

? ? ? ? ? ? than:''

? ? ? ? }

? ? },

? ? mounted(){

? ? ? ? this.init()

? ? ? ? this.main()

? ? },

? ? methods:{

? ? ? ? init(){

? ? ? ? ? ? let that = this

? ? ? ? ? ? let u = navigator.userAgent;

? ? ? ? ? ? //ios手机

? ? ? ? ? ? var isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);

? ? ? ? ? ? if(isIOS){

? ? ? ? ? ? ? ? this.$nextTick(() => {

? ? ? ? ? ? ? ? ? ? this.autoPlayAudio();

? ? ? ? ? ? ? ? })

? ? ? ? ? ? }else{

? ? ? ? ? ? ? ? this.$nextTick(() => {

? ? ? ? ? ? ? ? let time = setTimeout(function () {

? ? ? ? ? ? ? ? ? ? ? ? let audio = that.$refs.audio;

? ? ? ? ? ? ? ? ? ? ? ? //音频总时长 秒

? ? ? ? ? ? ? ? ? ? ? ? that.second = audio.duration;

? ? ? ? ? ? ? ? ? ? ? ? that.than = 100/audio.duration;

? ? ? ? ? ? ? ? ? ? ? ? that.$parent.calculationTime(audio.duration);

? ? ? ? ? ? ? ? ? ? ? ? clearInterval(time);

? ? ? ? ? ? ? ? ? ? }, 500)

? ? ? ? ? ? ? ? })

? ? ? ? ? ? }

? ? ? ? },

? ? ? ? autoPlayAudio() {

? ? ? ? ? ? let ua = window.navigator.userAgent.toLowerCase();

? ? ? ? ? ? let that = this;

? ? ? ? ? ? let audio = this.$refs.audio;

? ? ? ? ? ? if(ua.match(/MicroMessenger/i) == 'micromessenger'){

? ? ? ? ? ? ? ? //微信浏览器

? ? ? ? ? ? ? ? wx.config({

? ? ? ? ? ? ? ? ? ? debug: false,

? ? ? ? ? ? ? ? ? ? appId: '',

? ? ? ? ? ? ? ? ? ? timestamp: 1,

? ? ? ? ? ? ? ? ? ? nonceStr: '',

? ? ? ? ? ? ? ? ? ? signature: '',

? ? ? ? ? ? ? ? ? ? jsApiList: []

? ? ? ? ? ? ? ? });

? ? ? ? ? ? ? ?wx.ready(function() {

? ? ? ? ? ? ? ? audio.play();

? ? ? ? ? ? ? ? audio.pause();

? ? ? ? ? ? ? ? let time = setTimeout(function () {

? ? ? ? ? ? ? ? ? ? ? ? if(audio.duration>0){

? ? ? ? ? ? ? ? ? ? ? ? ? ? //音频总时长 秒

? ? ? ? ? ? ? ? ? ? ? ? ? ? that.second = audio.duration;

? ? ? ? ? ? ? ? ? ? ? ? ? ? that.than = 100/audio.duration;

? ? ? ? ? ? ? ? ? ? ? ? ? ? that.$parent.calculationTime(audio.duration);

? ? ? ? ? ? ? ? ? ? ? ? }else{

? ? ? ? ? ? ? ? ? ? ? ? ? ? that.autoPlayAudio();

? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? clearInterval(time);

? ? ? ? ? ? ? ? ? ? }, 500)

? ? ? ? ? ? ? ? });

? ? ? ? ? ? }else{

? ? ? ? ? ? ? ? let time = setTimeout(function () {

? ? ? ? ? ? ? ? ? ? if(audio.duration>0){

? ? ? ? ? ? ? ? ? ? ? ? //音频总时长 秒

? ? ? ? ? ? ? ? ? ? ? ? that.second = audio.duration;

? ? ? ? ? ? ? ? ? ? ? ? that.than = 100/audio.duration;

? ? ? ? ? ? ? ? ? ? ? ? that.$parent.calculationTime(audio.duration);

? ? ? ? ? ? ? ? ? ? }else{

? ? ? ? ? ? ? ? ? ? ? ? that.autoPlayAudio();

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? clearInterval(time);

? ? ? ? ? ? ? ? }, 500)

? ? ? ? ? ? }

? ? ? ? },

? ? ? ? //监测播放进度

? ? ? ? updateTime(){

? ? ? ? ? ?let audio = this.$refs.audio;

? ? ? ? ? ?let time = Number(this.second)-Number(audio.currentTime);

? ? ? ? ? ?this.$parent.calculationTime(time);

? ? ? ? ? ?this.draw(this.than*audio.currentTime);

? ? ? ? },

? ? ? ? changeType(){

? ? ? ? ? this.playbool = !this.playbool;

? ? ? ? ? let audio = this.$refs.audio;

? ? ? ? ? if(this.playbool){

? ? ? ? ? ? //暂停

? ? ? ? ? ? ?audio.pause()

? ? ? ? ? }else{

? ? ? ? ? ? audio.play()

? ? ? ? ? }

? ? ? ? },

? ? ? ? event(dom) { ?//事件绑定

? ? ? ? ? ? if(this.isMobile){

? ? ? ? ? ? ? ? dom.addEventListener("touchstart", this.OnMouseDown.bind(this), false);

? ? ? ? ? ? ? ? dom.addEventListener("touchmove", this.throttle(this.OnMouseMove.bind(this)), false);

? ? ? ? ? ? ? ? dom.addEventListener("touchend", this.OnMouseUp.bind(this), false);

? ? ? ? ? ? ? ? return

? ? ? ? ? ? }

? ? ? ? ? ? dom.addEventListener("mousedown", this.OnMouseDown.bind(this), false);

? ? ? ? ? ? dom.addEventListener("mousemove", this.throttle(this.OnMouseMove.bind(this)), false);

? ? ? ? ? ? dom.addEventListener("mouseup", this.OnMouseUp.bind(this), false);

? ? ? ? },

? ? ? ? OnMouseDown(evt) {

? ? ? ? ? ? let audio = this.$refs.audio;

? ? ? ? ? ? //暂停音频

? ? ? ? ? ? audio.pause()

? ? ? ? ? ? this.clearLocation(evt);

? ? ? ? ? ? let range = 10;

? ? ? ? ? ? let X = this.getx(evt);

? ? ? ? ? ? let Y = this.gety(evt);

? ? ? ? ? ? let P = this.P

? ? ? ? ? ? let minX = P.x - this.slider - range;

? ? ? ? ? ? let maxX = P.x + this.slider + range;

? ? ? ? ? ? let minY = P.y - this.slider - range;

? ? ? ? ? ? let maxY = P.y + this.slider + range;

? ? ? ? ? ? if (minX < X && X < maxX && minY < Y && Y < maxY) { ? //判断鼠标是否在滑块上

? ? ? ? ? ? this.isDown = true;

? ? ? ? ? ? } else {

? ? ? ? ? ? this.isDown = false;

? ? ? ? ? ? }

? ? ? ? },

? ? ? ? main(){

? ? ? ? ? ? const dom = document.getElementById("content")

? ? ? ? ? ? const obj = {

? ? ? ? ? ? ? ? el: dom,

? ? ? ? ? ? ? ? startDeg:1.5 ? ?,

? ? ? ? ? ? ? ? endDeg: 3.5,

? ? ? ? ? ? ? ? outColor: 'rgba(50, 50, 70, .2)',

? ? ? ? ? ? ? ? counterclockwise: false

? ? ? ? ? ? }

? ? ? ? ? ? this.constructor(obj)

? ? ? ? },

? ? ? ? constructor(param) {

? ? ? ? ? ? this.initParam(param)

? ? ? ? ? ? this.draw(this.value)

? ? ? ? },

? ? ? ? initParam(param) {

? ? ? ? ? ? const {

? ? ? ? ? ? el,

? ? ? ? ? ? startDeg = 1.5,

? ? ? ? ? ? endDeg = 3.5,

? ? ? ? ? ? outColor = "rgba(50, 50, 70, .2)",

? ? ? ? ? ? innerLineWidth = 1,

? ? ? ? ? ? outLineWidth = 5,

? ? ? ? ? ? counterclockwise = true,

? ? ? ? ? ? slider = 8,

? ? ? ? ? ? color = ["#ffffff", "#ffffff"],

? ? ? ? ? ? sliderColor = "#fff",

? ? ? ? ? ? sliderBorderColor = "#33aaff",

? ? ? ? ? ? value = 0,

? ? ? ? ? ? change = (v)=> { ?},

? ? ? ? ? ? textShow = true

? ? ? ? ? ? } = param;

? ? ? ? ? ? this.el = el;

? ? ? ? ? ? this.width = el.offsetWidth;

? ? ? ? ? ? this.height = el.offsetHeight;

? ? ? ? ? ? this.center = this.width / 2

? ? ? ? ? ? this.radius = this.width / 2 - 30; //滑动路径半径

? ? ? ? ? ? this.initCanvas(el);

? ? ? ? ? ? this.startDeg = startDeg;

? ? ? ? ? ? this.endDeg = endDeg;

? ? ? ? ? ? this.outColor = outColor;

? ? ? ? ? ? this.innerLineWidth = innerLineWidth;

? ? ? ? ? ? this.outLineWidth = outLineWidth;

? ? ? ? ? ? this.counterclockwise = counterclockwise;

? ? ? ? ? ? this.slider = slider;

? ? ? ? ? ? this.color = color;

? ? ? ? ? ? this.sliderColor = sliderColor;

? ? ? ? ? ? this.sliderBorderColor = sliderBorderColor;

? ? ? ? ? ? this.value = value;

? ? ? ? ? ? this.textShow = textShow;

? ? ? ? ? ? this.change = change;

? ? ? ? ? ? this.isDown = false;

? ? ? ? ? ? this.event(el)

? ? ? ? },

? ? ? ? OnMouseMove(evt) {

? ? ? ? ? ? if (!this.isDown) return;

? ? ? ? ? ? let evpoint = {};

? ? ? ? ? ? evpoint.x = this.getx(evt);

? ? ? ? ? ? evpoint.y = this.gety(evt);

? ? ? ? ? ? let point = this.spotchangeXY(evpoint);

? ? ? ? ? ? let deg = this.XYToDeg(point.x, point.y);

? ? ? ? ? ? deg = this.counterclockwise ? deg : Math.PI * 2 - deg;

? ? ? ? ? ? let val = (deg/ Math.PI - this.startDeg) / (this.endDeg - this.startDeg) ?* 100

? ? ? ? ? ? if(val<0) val = 100 + val;

? ? ? ? ? ? if(val >= 100) val = 100;

? ? ? ? ? ? if(val <= 0) val = 0;

? ? ? ? ? ? if(Math.abs (val - this.value) > 10) return;

? ? ? ? ? ? //音频定位播放

? ? ? ? ? ? let time = val/this.than;

? ? ? ? ? ? let audio = this.$refs.audio;

? ? ? ? ? ? audio.currentTime = time

? ? ? ? ? ? this.animate = requestAnimationFrame(this.draw.bind(this,val));

? ? ? ? ? ? if(this.value != Math.round(val)){

? ? ? ? ? ? ? ? this.value = Math.round(val);

? ? ? ? ? ? ? ? this.change(this.value)

? ? ? ? ? ? }

? ? ? ? },

? ? ? ? OnMouseUp(evt) { ?//鼠标释放

? ? ? ? ? ? const _this = this

? ? ? ? ? ? cancelAnimationFrame(_this.animate);

? ? ? ? ? ? this.isDown = false;

? ? ? ? ? ? if(this.distance(evt)){

? ? ? ? ? ? ? ? this.playbool = false;

? ? ? ? ? ? ? ? let audio = this.$refs.audio;

? ? ? ? ? ? ? ? //播放音频

? ? ? ? ? ? ? ? audio.play()

? ? ? ? ? ? }

? ? ? ? },

? ? ? ? distance(evt){

? ? ? ? ? ? let x = this.getx(evt);

? ? ? ? ? ? let y = this.gety(evt);

? ? ? ? ? ? let distance = Math.abs(Math.sqrt(Math.pow(x - 135, 2) + Math.pow(y - 135, 2)));

? ? ? ? ? ? if(0<distance && distance<130){

? ? ? ? ? ? ? ? return true

? ? ? ? ? ? }else{

? ? ? ? ? ? ? ? return false

? ? ? ? ? ? }

? ? ? ? },

? ? ? ? //点击定位

? ? ? ? clearLocation(evt){

? ? ? ? ? ? let evpoint = {};

? ? ? ? ? ? evpoint.x = this.getx(evt);

? ? ? ? ? ? evpoint.y = this.gety(evt);

? ? ? ? ? ? let point = this.spotchangeXY(evpoint);

? ? ? ? ? ? let deg = this.XYToDeg(point.x, point.y);

? ? ? ? ? ? deg = this.counterclockwise ? deg : Math.PI * 2 - deg;

? ? ? ? ? ? let val = (deg/ Math.PI - this.startDeg) / (this.endDeg - this.startDeg) ?* 100

? ? ? ? ? ? if(val<0) val = 100 + val;

? ? ? ? ? ? if(val >= 100) val = 100;

? ? ? ? ? ? if(val <= 0) val = 0;

? ? ? ? ? ? if(this.distance(evt)){

? ? ? ? ? ? ? ? this.animate = requestAnimationFrame(this.draw.bind(this,val));

? ? ? ? ? ? ? ? //音频定位播放

? ? ? ? ? ? ? ? let time = val/this.than;

? ? ? ? ? ? ? ? let audio = this.$refs.audio;

? ? ? ? ? ? ? ? audio.currentTime = time

? ? ? ? ? ? ? ? audio.play()

? ? ? ? ? ? ? ? audio.pause()

? ? ? ? ? ? ? ? if(this.value != Math.round(val)){

? ? ? ? ? ? ? ? ? ? this.value = Math.round(val);

? ? ? ? ? ? ? ? ? ? this.change(this.value)

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? },

? ? ? ? //绘图

? ? ? ? draw(value) {

? ? ? ? ? ? this.ctx.clearRect(0, 0, this.width, this.width);

? ? ? ? ? ? this.ctx.save();

? ? ? ? ? ? let startDeg = this.counterclockwise ? Math.PI * (2 - this.startDeg) : Math.PI * this.startDeg

? ? ? ? ? ? let endDeg = this.counterclockwise ? Math.PI * (2 - this.endDeg) : Math.PI * this.endDeg

? ? ? ? ? ? // 绘制外侧圆弧

? ? ? ? ? ? this.ctx.beginPath();

? ? ? ? ? ? this.ctx.arc(this.center, this.center, this.radius, startDeg, endDeg, this.counterclockwise); // 绘制外侧圆弧

? ? ? ? ? ? this.ctx.strokeStyle = this.outColor;

? ? ? ? ? ? this.ctx.lineCap = "round";

? ? ? ? ? ? this.ctx.lineWidth = this.outLineWidth;

? ? ? ? ? ? this.ctx.stroke();

? ? ? ? ? ? let Deg = this.valToDeg(value)

? ? ? ? ? ? // 绘制可变圆弧

? ? ? ? ? ? let themeColor = (typeof this.color == 'String') ? this.color : this.setLinearGradient()

? ? ? ? ? ? this.ctx.beginPath();

? ? ? ? ? ? this.ctx.arc(this.center, this.center, this.radius, startDeg, Deg, this.counterclockwise); // 可变圆弧

? ? ? ? ? ? this.ctx.strokeStyle = ?themeColor;

? ? ? ? ? ? this.ctx.lineCap = "round";

? ? ? ? ? ? this.ctx.lineWidth = this.outLineWidth;

? ? ? ? ? ? this.ctx.stroke();

? ? ? ? ? ? // 绘制滑块

? ? ? ? ? ? this.P = this.DegToXY(Deg)

? ? ? ? ? ? this.ctx.beginPath();

? ? ? ? ? ? this.ctx.moveTo(this.center, this.center);

? ? ? ? ? ? this.ctx.arc(this.P.x, this.P.y, this.slider, 0, Math.PI * 2, false); // 绘制滑块

? ? ? ? ? ? this.ctx.fillStyle = this.sliderColor;;

? ? ? ? ? ? this.ctx.fill();

? ? ? ? },

? ? ? ? initCanvas(dom) {

? ? ? ? ? ? this.canvas = document.createElement("canvas");

? ? ? ? ? ? this.canvas.setAttribute("id", "dragArc");

? ? ? ? ? ? this.canvas.setAttribute("width", this.width);

? ? ? ? ? ? this.canvas.setAttribute("height", this.width);

? ? ? ? ? ? dom.appendChild(this.canvas);

? ? ? ? ? ? this.ctx = this.canvas.getContext("2d");

? ? ? ? ? ? this.isMobile = /Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent);

? ? ? ? },

? ? ? ? //将值转化为弧度

? ? ? ? valToDeg(v) {

? ? ? ? ? ? let range = this.endDeg - this.startDeg;

? ? ? ? ? ? let val = range / 100 * v;

? ? ? ? ? ? if(this.counterclockwise && (val !=0) ) val = 2 -val;

? ? ? ? ? ? let startDeg = this.counterclockwise ? (2 - this.startDeg) : this.startDeg;

? ? ? ? ? ? return (startDeg + val) * Math.PI;

? ? ? ? },

? ? ? ? // 弧度转化为对应坐标值

? ? ? ? DegToXY(deg) {

? ? ? ? ? ? let d = 2 * Math.PI - deg;

? ? ? ? ? ? return this.respotchangeXY({

? ? ? ? ? ? x: this.radius * Math.cos(d),

? ? ? ? ? ? y: this.radius * Math.sin(d)

? ? ? ? ? ? })

? ? ? ? },

? ? ? ? //canvas坐标转化为中心坐标

? ? ? ? spotchangeXY(point) {

? ? ? ? ? ? const spotchangeX = (i) => {

? ? ? ? ? ? return i - this.center

? ? ? ? ? ? }

? ? ? ? ? ? const spotchangeY = (i) => {

? ? ? ? ? ? return this.center - i

? ? ? ? ? ? }

? ? ? ? ? ? return {

? ? ? ? ? ? x: spotchangeX(point.x),

? ? ? ? ? ? y: spotchangeY(point.y)

? ? ? ? ? ? }

? ? ? ? },

? ? ? ? //中心坐标转化为canvas坐标

? ? ? ? respotchangeXY(point) {

? ? ? ? ? ? const spotchangeX = (i) => {

? ? ? ? ? ? return i + this.center

? ? ? ? ? ? }

? ? ? ? ? ? const spotchangeY = (i) => {

? ? ? ? ? ? return this.center - i

? ? ? ? ? ? }

? ? ? ? ? ? return {

? ? ? ? ? ? x: spotchangeX(point.x),

? ? ? ? ? ? y: spotchangeY(point.y)

? ? ? ? ? ? }

? ? ? ? },

? ? ? ? setLinearGradient(){

? ? ? ? ? ? const grad ?= this.ctx.createLinearGradient(0,0, 0,this.width);

? ? ? ? ? ? this.color.forEach((e, i) => {

? ? ? ? ? ? ? ? if(i == 0){

? ? ? ? ? ? ? ? ? ? grad.addColorStop(0, e)

? ? ? ? ? ? ? ? }else ?if(i == this.color.length - 1){

? ? ? ? ? ? ? ? ? ? grad.addColorStop(1, e)

? ? ? ? ? ? ? ? }else{

? ? ? ? ? ? ? ? ? ? grad.addColorStop(1/this.color.length * (i+1), e);

? ? ? ? ? ? ? ? }

? ? ? ? ? ? });

? ? ? ? ? ? return grad;

? ? ? ? },

? ? ? ? // 将坐标点转化为弧度

? ? ? ? XYToDeg(lx, ly) {

? ? ? ? ? ? let adeg = Math.atan(ly / lx)

? ? ? ? ? ? let deg;

? ? ? ? ? ? if (lx >= 0 && ly >= 0) {

? ? ? ? ? ? deg = adeg ;

? ? ? ? ? ? }

? ? ? ? ? ? if (lx <= 0 && ly >= 0) {

? ? ? ? ? ? deg = adeg + Math.PI;

? ? ? ? ? ? }

? ? ? ? ? ? if (lx <= 0 && ly <= 0) {

? ? ? ? ? ? deg = adeg + Math.PI;

? ? ? ? ? ? }

? ? ? ? ? ? if (lx > 0 && ly < 0) {

? ? ? ? ? ? deg = adeg + Math.PI * 2;

? ? ? ? ? ? }

? ? ? ? ? ? return deg

? ? ? ? },

? ? ? ? //获取鼠标在canvas内坐标x

? ? ? ? getx(ev) {

? ? ? ? ? ? if(!this.isMobile) return ev.clientX - this.el.getBoundingClientRect().left;

? ? ? ? ? ? if(ev.touches.length){

? ? ? ? ? ? ? ? return ev.touches[0].pageX - this.el.getBoundingClientRect().left;

? ? ? ? ? ? }else{

? ? ? ? ? ? ? ? return ev.changedTouches[0].pageX - this.el.getBoundingClientRect().left;

? ? ? ? ? ? }

? ? ? ? },

? ? ? ? //获取鼠标在canvas内坐标y

? ? ? ? gety(ev) {

? ? ? ? ? ? if(!this.isMobile) return ev.clientY - this.el.getBoundingClientRect().top;

? ? ? ? ? ? if(ev.touches.length){

? ? ? ? ? ? ? ? ?return ev.touches[0].pageY - this.el.getBoundingClientRect().top;

? ? ? ? ? ? }else{

? ? ? ? ? ? ? ? return ev.changedTouches[0].pageY - this.el.getBoundingClientRect().top;

? ? ? ? ? ? }

? ? ? ? },

? ? ? ? //节流

? ? ? ? throttle(func) {

? ? ? ? ? ? let previous = 0;

? ? ? ? ? ? return function() {

? ? ? ? ? ? ? ? let now = Date.now();

? ? ? ? ? ? ? ? let context = this;

? ? ? ? ? ? ? ? let args = arguments;

? ? ? ? ? ? ? ? if (now - previous > 10) {

? ? ? ? ? ? ? ? ? ? func.apply(context, args);

? ? ? ? ? ? ? ? ? ? previous = now;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? },

? ? }

}

</script>

<style scoped>

.circle_box{

? ? ?position: relative;

? ? ?padding-top: 130px;

? ? ?top: 0;

? ? ?left: 0;

? ? ?width: 100%;

? ? ?height: 245px;

}

#content{

? position: absolute;

? left: 50%;

? transform: translateX(-50%);

? height: 240px;

? width: 270px;

}

.img_0{

? position: absolute;

? top: 175px;

? left: 50%;

? transform: translateX(-50%);

? width: 180px;

? height: 180px;

? border-radius: 50%;

? z-index: 5;

}

.img_1{

? position: absolute;

? left: 50%;

? transform: translateX(-50%);

? top: 243px;

? width: 34px;

? height: 46px;

? z-index: 10;

}

.posi{

? ? position: absolute;

? ? left: 0;

? ? top: 10px;

? ? z-index: 1000;

}

</style>

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-11-05 00:39:30  更:2022-11-05 00:40:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 18:11:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码