基于vue实现滚动条滚动到指定位置对应位置数字进行tween特效


Posted in Javascript onApril 18, 2019

实现目标

浏览各大云平台,发现一个页面特效使用较为频繁,以“百度云”为例(https://cloud.baidu.com/),进入百度云后,当滚动条滚动至“更可靠的数据支持”模块时,页面数据将会开始滚动式增长特效。下面将会介绍我的解决方案,希望有同行更好的解决方案大家一起交流。

基于vue实现滚动条滚动到指定位置对应位置数字进行tween特效

解决思路

主要的解决要点如下:

如何实现数字动画的效果
如何监听滚动条到指定的位置
分解要点寻找解决思路:

一、如何实现数字动画的效果

在vue的官方文档(https://cn.vuejs.org/v2/guide... 中,实现了数字动画特效。于是参照此示例基于tween来完成。

基于vue实现滚动条滚动到指定位置对应位置数字进行tween特效

二、如何监听滚动条到指定的位置

使用 window.addEventListener('scroll',this.handleScroll)监听窗口的滚动,进行位置判断。

实现代码

1.下载tween.js

cnpm install tween.js --save-dev

2.引入tween.js

import TWEEN from 'tween.js'
// ***.vue,注意这里千万别在main.js中引入,否则运行会报:TWEEN is undefined,
// 这边存疑,不知道为什么在main.js中不执行

3.实现数字动画效果和监听滚动条

<div class="sectionRight">
 <span class="numberInit" style="display:none">{{num1}}</span>
 <p class="numberGrow numberGrow1">{{formatNum1}}</p>
 <p class="sectionTxt">抵御攻击</p>
</div>
export default {
 computed:{
 formatNum1(){
  let num = this.animatedNum1
  return (num || 0).toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1,')
 }
 },
 data () {
 return {
  num1: 0,
  animatedNum1: 0
 }
 },
 watch: {
 num1: function(newValue, oldValue) {
  var vm = this
  function animate (time) {
  requestAnimationFrame(animate)
  TWEEN.update(time)
  }
  new TWEEN.Tween({ tweeningNumber: oldValue })
  .easing(TWEEN.Easing.Quadratic.Out)
  .to({ tweeningNumber: newValue }, 5000)
  .onUpdate(function () {
   vm.animatedNum1 = this.tweeningNumber.toFixed(0) 
   //toFixed(num):num代表小数点后几位
  })
  .start()
  animate()
 }
 },
 methods:{
 setAnimatedNum(){
  this.num1 = 3567892881
 },
 handleScroll(){  
  let windowH = document.body.clientHeight
  let docSrollTop = $(document).scrollTop() //文档卷动值
  let clientH = $(window).height() //视窗大小
  let sectionTop = $(".sectionBody").offset().top //动态文字模块距离文档头部的距离
  let sectionH = $(".sectionBody").height()
  if((docSrollTop + clientH - sectionTop) >= 0 
  && (docSrollTop - sectionTop - sectionH) <= 0){
  this.setAnimatedNum()
  }
 }
 },
 mounted(){
 this.handleScroll()
 window.addEventListener('scroll',this.handleScroll)
 }
}

github源码:https://github.com/Mirror1988...
演示地址 :https://mirror198829.github.i...

总结

以上所述是小编给大家介绍的基于vue实现滚动条滚动到指定位置对应位置数字进行tween特效,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
javascript中获取下个月一号,是星期几
Jun 01 Javascript
javascript拖拽上传类库DropzoneJS使用方法
Dec 05 Javascript
jquery实现人性化的有选择性禁用鼠标右键
Jun 30 Javascript
网站接入QQ登录的两种方法
Jul 22 Javascript
jquery地址栏链接与a标签链接匹配之特效代码总结
Aug 24 Javascript
javascript中eval和with用法实例总结
Nov 30 Javascript
JavaScript截取、切割字符串的技巧
Jan 07 Javascript
Javascript中prototype的使用详解
Jun 18 Javascript
vue2导航根据路由传值,而改变导航内容的实例
Nov 10 Javascript
微信小程序button组件使用详解
Jan 31 Javascript
webpack4 配置 ssr 环境遇到“document is not defined”
Oct 24 Javascript
webpack 如何同时输出压缩和未压缩的文件的实现步骤
Jun 05 Javascript
Vue的H5页面唤起支付宝支付功能
Apr 18 #Javascript
详解Vue中的scoped及穿透方法
Apr 18 #Javascript
Node.js对MongoDB进行增删改查操作的实例代码
Apr 18 #Javascript
Vue 进阶之路(三)
Apr 18 #Javascript
Vue自定义全局Toast和Loading的实例详解
Apr 18 #Javascript
javascript数据类型中的一些小知识点(推荐)
Apr 18 #Javascript
在element-ui的select下拉框加上滚动加载
Apr 18 #Javascript
You might like
php下实现农历日历的代码
2007/03/07 PHP
php实现专业获取网站SEO信息类实例
2015/04/02 PHP
php实现Mysql简易操作类
2015/10/11 PHP
phpStudy访问速度慢和启动失败的解决办法
2015/11/19 PHP
DWZ+ThinkPHP开发时遇到的问题分析
2016/12/12 PHP
PHP PDO操作MySQL基础教程
2017/06/05 PHP
PHP PDOStatement::getColumnMeta讲解
2019/02/01 PHP
浅谈laravel中的关联查询with的问题
2019/10/10 PHP
Jquery选择器 $实现原理
2009/12/02 Javascript
js 时间格式与时间戳的相互转换示例代码
2013/12/25 Javascript
用jquery写的一个万年历(自写)
2014/01/20 Javascript
jquery实现弹出层遮罩效果的简单实例
2014/03/03 Javascript
关闭页面window.location事件未执行的原因及解决方法
2014/09/01 Javascript
jfreechart插件将数据展示成饼状图、柱状图和折线图
2015/04/13 Javascript
关注jquery技巧提高jquery技能(前端开发必学)
2015/11/02 Javascript
javascript 用函数实现继承详解
2016/05/28 Javascript
jQuery 控制文本框自动缩小字体填充
2017/06/16 jQuery
BootStrap模态框和select2合用时input无法获取焦点的解决方法
2017/09/01 Javascript
vue路由嵌套的SPA实现步骤
2017/11/06 Javascript
JS关于刷新页面的相关总结
2018/05/09 Javascript
vue+axios 前端实现的常用拦截的代码示例
2018/08/23 Javascript
vue中的mescroll搜索运用及各种填坑处理
2019/10/30 Javascript
解决vue props传Array/Object类型值,子组件报错的情况
2020/11/07 Javascript
[57:41]Secret vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
详解Python程序与服务器连接的WSGI接口
2015/04/29 Python
Python类的动态修改的实例方法
2017/03/24 Python
pip安装python库的方法总结
2019/08/02 Python
Python restful框架接口开发实现
2020/04/13 Python
keras的siamese(孪生网络)实现案例
2020/06/12 Python
Grow Gorgeous美国官网:只要八天,体验唤醒毛囊后新生的茂密秀发
2018/06/04 全球购物
个人自我鉴定怎么写
2013/10/28 职场文书
安全资金保障制度
2014/01/23 职场文书
中学教师培训制度
2014/01/31 职场文书
公司年会主持词
2014/03/22 职场文书
班级学习雷锋活动总结
2014/07/04 职场文书
党员“四风”问题批评与自我批评思想汇报
2014/10/06 职场文书