前端动画框架GSAP框架随笔
gsap是目前非常流行的前端动画框架,可以非常轻松构造出复杂的动画效果,这里仅对我实际使用中的一些例子进行总结
示例
基础用法
// 声明一个滚动控制器
let ctrl = new ScrollMagic.Controller({
globalSceneOptions:{
offset:-200
}
})
// MORE+
Array.from(document.querySelectorAll(".more")).forEach((el,ix)=>{
let moreLink = new TimelineMax();
moreLink.from(el,{yPercent:300,opacity:0}) // 在timelineMax中 from是指从某种样式过渡到现在的样式
new ScrollMagic.Scene({
triggerElement:document.querySelectorAll("#app div.home")[0].children[ix+3],
triggerHook:0.35,
offset:200
}).setTween(moreLink).addTo(ctrl)
})
// 同时控制两个元素的过渡动画
// 师资简介
init_swiper_teachear(){
const vue = this
class SwiperTeacher{
now = 0
max = vue.swiperTeacher.length-1
imgDom = null;
infosDom = null;
numListDom = null
constructor () {
vue.$nextTick(()=>{this.getDom()})
}
next(){
return new Promise(async (resolve) => {
if(this.now === this.max) vue.goNext('ADVANTAGE');
const imgEnd = gsap.to(this.imgDom[this.imgDom.length - 1 -this.now],{xPercent:-100,ease:'power2.out'})
const infosEnd = gsap.to(this.infosDom[0],{xPercent:(this.now+1) * 100,ease:'power2.out'})
await imgEnd
await infosEnd
this.now+=1
resolve()
})
}
pre(){
return new Promise(async (resolve) => {
if(this.now===0){resolve();return}
this.now-=1
const imgEnd = gsap.to(this.imgDom[this.imgDom.length - 1 - this.now],{xPercent:0,ease:'power2.out'})
const infosEnd = gsap.to(this.infosDom[0],{xPercent:(this.now)*100,ease:'power2.out'})
await imgEnd
await infosEnd
resolve()
})
}
async go(ix){
const needGo = ix-this.now
if(needGo===0) return;
if(needGo<0){
for(let i = 0;i<-needGo;i++){await this.pre()}
}else{
for(let i = 0;i<needGo;i++){await this.next()}
}
}
getDom(){
this.imgDom = document.querySelectorAll('.introductionOfTeachers .sliderContent .imgContent .img')
this.infosDom = document.querySelectorAll('.introductionOfTeachers .sliderContent .infoContent')
this.numListDom = document.querySelectorAll('.introductionOfTeachers .point-teacher .numList')
}
}
let control = new SwiperTeacher()
control = new Proxy(control,{
set (target, p, value) {
if(p==='now'){
control.numListDom.forEach((el,ix)=>{
el.classList.remove('active')
if(ix===value){el.classList.add('active')}
})
}
target[p] = value
return true
}
})
this.$refs['sliderRight-teacher'].addEventListener('click',async ()=>{await control.next()})
this.$refs['sliderLeft-teacher'].addEventListener('click',async ()=>{await control.pre()})
this.$nextTick(()=>{this.$refs['numList-teacher'].forEach((el,ix)=>{el.addEventListener('click',async ()=>{await control.go(ix)})})})
let randomTeacher = new TimelineMax()
randomTeacher.from('div.introductionOfTeachers .sliderContent',{
yPercent:100,
opacity:0,
onStart(){
vue.swiperTeacher = vue.randomArr(vue.raw_teacher_data,5)
control.now = 0
}
})
randomTeacher.from('div.introductionOfTeachers .point-teacher',{
yPercent:100,
opacity:0
})
new ScrollMagic.Scene({triggerElement:'div.introductionOfTeachers',triggerHook:0.35}).setTween(randomTeacher).addTo(ctrl)
}
// 对某个按钮的过渡动画经行处理 通过添加一层元素来经行动画 高阶函数来处理抖动
// 选择院校和新闻大按钮
init_design_button(){
Array.from(document.querySelectorAll('div.selectInstitution .listContent .designButton,div.news .listContent .designButton')).forEach((el,ix)=>{
class onceFunction{
constructor (bg) {
this.bg = bg
this.end = false
}
main(){
this.bg.style.backgroundColor = '#e06730'
this.bg.style.visibility = 'unset'
gsap.from(this.bg,{scaleX:0}).then(()=>{this.end = true})
}
move(){
this.main()
this.move = ()=>{}
}
leave(){
if(this.end){
this.bg.style.visibility = 'hidden'
this.move =()=>{
this.main()
this.move = ()=>{}
}
}
}
}
const o = new onceFunction(el.childNodes[0].childNodes[0])
el.addEventListener('mousemove', ()=>{o.move()})
el.addEventListener('mouseleave',()=>{o.leave()})
if(ix===0||ix===3){
o.move()
}
})
}
前端动画框架GSAP框架随笔的更多相关文章
- 准备.Net转前端开发-WPF界面框架那些事,值得珍藏的8个问题
题外话 不出意外,本片内容应该是最后一篇关于.Net技术的博客,做.Net的伙伴们忽喷忽喷..Net挺好的,微软最近在跨平台方面搞的水深火热,更新也比较频繁,而且博客园的很多大牛也写的有跨平台相关技术 ...
- Yii框架学习笔记(二)将html前端模板整合到框架中
选择Yii 2.0版本框架的7个理由 http://blog.chedushi.com/archives/8988 刚接触Yii谈一下对Yii框架的看法和感受 http://bbs.csdn.net/ ...
- (转) 基于Theano的深度学习(Deep Learning)框架Keras学习随笔-01-FAQ
特别棒的一篇文章,仍不住转一下,留着以后需要时阅读 基于Theano的深度学习(Deep Learning)框架Keras学习随笔-01-FAQ
- 前端开发者使用JS框架的三个等级
目前前端开发者使用JS框架是种很普遍的现象,因为框架可以加快开发速度,同时避免各类浏览器的兼容性问题.不过同样是用框架开发,不同开发者的境界水平还是有一定差距,本文将这些前端开发者分为三个等级. 第一 ...
- Web前端-Vue.js必备框架(五)
Web前端-Vue.js必备框架(五) 页面组件,商品列表组件,详情组件,购物车清单组件,结算页组件,订单详情组件,订单列表组件. vue-router 路由 vuex 组件集中管理 webpack ...
- Web前端-Vue.js必备框架(四)
Web前端-Vue.js必备框架(四) 计算属性: <div id="aaa"> {{ message.split('').reverse().join('') }} ...
- Web前端-Vue.js必备框架(三)
Web前端-Vue.js必备框架(三) vue是一款渐进式javascript框架,由evan you开发.vue成为前端开发的必备之一. vue的好处轻量级,渐进式框架,响应式更新机制. 开发环境, ...
- Web前端-Vue.js必备框架(二)
Web前端-Vue.js必备框架(二) vue调式工具vue-devtools 过滤器:vue.js允许你自定义过滤器,可被用作一些常见的文本格式化. mustache插值和v-bind表达式. vu ...
- Web前端-Vue.js必备框架(一)
Web前端-Vue.js必备框架(一) <!DOCTYPE html> <html lang="en"> <head> <meta cha ...
随机推荐
- str常用操作方法
1. 索引(即下标) s = 'ABCDEFGHIJKLMN' s1 = s[0] print('s[0] = ' + s1) #s[0] = A print('s[3] = '+ s[3]) #s[ ...
- centos 7.0 更改启动环境/启动进入图形界面/命令行模式
当前我桌面模式 systemctl set-default multi-user.target ln -sf /lib/systemd/system/multi-user.target /etc/sy ...
- BST,Splay平衡树学习笔记
BST,Splay平衡树学习笔记 1.二叉查找树BST BST是一种二叉树形结构,其特点就在于:每一个非叶子结点的值都大于他的左子树中的任意一个值,并都小于他的右子树中的任意一个值. 2.BST的用处 ...
- web自动化测试总结
web自动化: 1.测试用例(操作步骤,熟读需求文档,web项目先用手工研究,前置条件,预期结果) 接口自动化测试中数据功能最适合作为数据驱动,数据放在excel中需要操作excel 为什么web自动 ...
- 【C语言C++编程入门】程序的可读性和函数的调用!
一个简单程序的结构 你已经看过一个具体的例子,下面可以了解一些 C程序的基本规则了. 程序由一个或多个函数组成,其中一定有一个名为 main()的函数.函数的描述由函数头和函数体组成.函数头包括预处理 ...
- centos8平台使用vmstat监控系统
一,vmstat的用途和特点: vmstat 是一个常用的系统性能分析工具,主要用来分析系统的内存使用情况,也常用来分析 CPU 上下文切换和中断的次数. 相对于 iostat 来说,vmstat 可 ...
- selenium-远程调用
1.拉去镜像: docker pull selenium/hub docker pull baozhida/selenium-node-chrome-debug:58 docker pull baoz ...
- dbvis 导出表结构 xls
1.dbvis 可以导出多种格式的文件,如SQL.XLS.TXT.HTML.JSON.CSV及XML. 需求场景(本场景是实际场景引申的场景,此处导出xls): 最近,遇到一个需求需要将表的结构数据导 ...
- Hadoop 指令
date: 2018-04-30 09:07:56 updated: 2018-04-30 09:07:56 1.ls hadoop fs -ls / 列出hdfs文件系统根目录下的目录和文件 had ...
- ctfshow 1024杯 部分web题解
------------恢复内容开始------------ 今年1024忙得厉害,去大上海参加geekpwn膜拜大佬,几家平台的题目没怎么好好看.特别是小破站的比赛拉跨的一批,bytectf的web ...