axios vue 加载效果动画_vue实现页面加载动画效果

本文介绍了一种使用Vue.js实现页面加载动画的方法,包括通过监听滚轮事件和触摸事件来改变页面状态,以及如何使用CSS动画增强用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们经常看到数据未出现时,页面中会有一条提示消息, 页面正在加载中,如何实现该效果呢 ,请看下面代码

:style="{background: option.background,color: option.color||'#fff'}"

:class="{'page-before': option.index < currentpage,

'page-after': option.index > currentpage,

'page-current': option.index === currentpage}">

页面正在渲染中。。。

有木有感觉很简单

下面上点干货,实现页面的动画效果

export default {

name: 'page-controller',

props: {

pagenum: number,

currentpage: number,

option: {

type: object,

default: {

arrowstype: 'animate',

navbar: true,

highlight: true,

loop: true //是否开启滚动循环

}

}

},

methods: {

changepage (index) {

this.$emit('changepage', index);

}

},

computed: {

nextindex () {

if (this.currentpage === this.pagenum) {

if(this.option.loop){

return 1

}else{

return this.pagenum

}

} else {

return this.currentpage + 1;

}

},

previndex () {

if (this.currentpage === 1) {

if(this.option.loop){

return this.pagenum

}else{

return 1

}

} else {

return this.currentpage - 1;

}

}

},

created () {

if (this.option.navbar === undefined) {

this.option.navbar = true;

}

},

mounted () {

let _this = this;

let timer = null;

let start = 0;

// 滚轮处理

function scrollhandler (direction) {

// 防止重复触发滚动事件

if (timer != null) {

return;

}

if (direction === 'down') {

_this.changepage(_this.nextindex);

} else {

_this.changepage(_this.previndex);

}

timer = settimeout(function() {

cleartimeout(timer);

timer = null;

}, 300);

}

// if (object.hasownproperty.call(window,'onmousewheel')) {

if (object.hasownproperty.call(window,'onmousewheel')) {

// 监听滚轮事件

window.addeventlistener('mousewheel',function (event) { // ie/opera/chrome

let direction = event.wheeldelta > 0 ? 'up':'down';

scrollhandler(direction);

},false);

} else {

window.addeventlistener('dommousescroll',function (event) { // firefox

let direction = event.detail > 0 ? 'up':'down';

scrollhandler(direction);

},false);

}

// 移动端触摸事件处理

window.addeventlistener('touchstart', function (event) {

start = event.touches[0].clienty;

})

window.addeventlistener('touchmove', function (event) {

event.preventdefault();

})

window.addeventlistener('touchend', function (event) {

let spacing = event.changedtouches[0].clienty - start;

let direction;

if (spacing > 50) {

direction = 'up';

scrollhandler(direction);

} else if (spacing < -50) {

direction = 'down';

scrollhandler(direction);

}

})

}

}

.controller {

position: fixed;

right: 20px;

top: 50%;

z-index: 99;

}

.controller ul {

transform: translate3d(0,-50%,0);

list-style: none;

margin: 0;

padding: 0;

}

.controller-item {

cursor: pointer;

width: 20px;

height: 20px;

border-radius: 50%;

margin-top: 10px;

background-color: rgba(255, 255, 255, 0.3);

transition: background-color 0.3s ease 0s;

}

.controller-item:hover {

background-color: rgba(255, 255, 255, 0.7);

}

.controller-item.current {

background-color: rgba(255, 255, 255, 1);

}

.prev-btn,.next-btn {

cursor: pointer;

display: block;

text-align: center;

width: 20px;

height: 20px;

position: fixed;

left: 50%;

margin-left: -10px;

border: 4px solid #fff;

background-color: transparent;

outline: none;

}

.prev-btn {

top: 80px;

transform: rotate(-45deg);

border-bottom-color: transparent;

border-left-color: transparent;

}

.next-btn {

bottom: 80px;

transform: rotate(45deg);

border-top-color: transparent;

border-left-color: transparent;

}

.prev-btn.moving {

animation: prev-up-down 0.7s linear 0s infinite;

}

.next-btn.moving {

animation: next-up-down 0.7s linear 0s infinite;

}

@keyframes next-up-down {

0% {

transform: translate3d(0,0,0) rotate(45deg);

}

25% {

transform: translate3d(0,6px,0) rotate(45deg);

}

50% {

transform: translate3d(0,0,0) rotate(45deg);

}

75% {

transform: translate3d(0,-6px,0) rotate(45deg);

}

100% {

transform: translate3d(0,0,0) rotate(45deg);

}

}

@keyframes prev-up-down {

0% {

transform: translate3d(0,0,0) rotate(-45deg);

}

25% {

transform: translate3d(0,-6px,0) rotate(-45deg);

}

50% {

transform: translate3d(0,0,0) rotate(-45deg);

}

75% {

transform: translate3d(0,6px,0) rotate(-45deg);

}

100% {

transform: translate3d(0,0,0) rotate(-45deg);

}

}

本文已被整理到了《vue.js前端组件学习教程》,欢迎大家学习阅读。

关于vue.js组件的教程,请大家点击专题vue.js组件学习教程进行学习。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持萬仟网。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

Vue中使用Axios进行数据请求时,我们可以使用loading动画来增加页面的交互体验。具体实现如下: 1. 安装`axios`和`vue-spinner`依赖: ```bash npm install axios vue-spinner --save ``` 2. 在需要使用的组件中引入`axios`和`vue-spinner`: ```javascript import axios from 'axios'; import Spinner from 'vue-spinner/src/ScaleLoader.vue'; ``` 3. 在`data`中添加`loading`属性,并将其初始化为`false`: ```javascript data() { return { loading: false, // ... } } ``` 4. 在需要使用loading动画的方法中,首先将`loading`设为`true`,然后在请求完成后将其设为`false`: ```javascript methods: { fetchData() { this.loading = true; axios.get('/api/data').then(response => { // 处理数据 this.loading = false; }).catch(error => { console.log(error); this.loading = false; }); } } ``` 5. 在模板中使用`vue-spinner`来显示loading动画: ```html <template> <div> <spinner v-if="loading" color="#41b883" :size="100" :margin="10"></spinner> <!-- 显示数据的内容 --> </div> </template> <script> import axios from 'axios'; import Spinner from 'vue-spinner/src/ScaleLoader.vue'; export default { components: { Spinner }, data() { return { loading: false, // ... } }, methods: { fetchData() { this.loading = true; axios.get('/api/data').then(response => { // 处理数据 this.loading = false; }).catch(error => { console.log(error); this.loading = false; }); } } } </script> ``` 这样,在数据请求时,loading动画会显示,请求完成后动画消失。这样可以提高用户的交互体验,让页面更加友好。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值