myslide 插件开发知识点总结和 css3 动画性能问题的研究
myslide 插件开发知识点总结和 css3 动画性能问题的研究
这篇文章主要是总结最近开发过程中遇到的问题。有几个问题又是不容易发现原因的问题,但是最后的结果又是很简单的。
1.手机端的 slider 插件是否有必要集成点按操作
对于我自己开发的版本来说还是集成了这个操作的。但是参考了京东,天猫,淘宝电商网站首页的 slider 图片轮播插件都没有支持点按操作。那么是为什么呢?
我想到的答案可能如下:
对于移动端来说,屏幕太小,轮播图上的显示当前图片状态的圆点,人的手指不容易选中。
2.this到底指向谁,改变 this 的指向
JavaScript 中this
在使用过程中比较容易出错的。那么this
到底是指向谁呢?我看到最多的一句话是:
this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象;
来看两段代码:
var a = {
m: 12,
b: {
m: 13,
func: function() {
console.log(this.m); //result: 13
}
}
};
a.b.func();
通过输出的结果,我们这个知道,当调用this
的时候,this
指向的是对象b
;
var a = {
m: 12,
b: {
m: 13,
func: function() {
console.log(this.m); //undefined
console.log(this); //window
}
}
};
var cc=a.b.func;
cc(); //相当于 window.cc();
由以上代码的输出结果是当this
被调用的时候 this
指向的是当前的 window 相当于window.cc()
,这个时候实际上是 window
调用了 this
;
上面的代码也印证了小结开头提到的那句话。但是很多时候根据实际情况我们需要改变this
的指向,那我们该怎么做呢?
比如下面这样,我有一个公共的 js 对象来保存一些公用的 DOM 操作的方法,比如:
var Doing.prototype={
likeSport:function(){
//这里使用原型的方式定义对象,就是想要这里的 this 始终指向送的都是 Doing
console.log(this.test2()'like speak');
},
getName:function(){
// console.log('zhiqiang');
return 'zhiqiang'
}
}
我的应用场景如下,当我单击 test 节点的时候,打印出我喜欢的运动。
<div class="father">
<div class="test">我喜欢的运动是什么?</div>
</div>
new Dong();
var Dong = function(){
var _this = this;
$('.father').on('click','.test',function(){
console.log(this); //this 指向的是 test 节点对象
_this.likeSport(); //这时 likeSport方法中的 this 指向的是 .test 节点对象
});
};
根据以上的代码,虽然我使用了 _this
缓存了 this
的只想,以使在单击函数的回掉中可以使用,但是这样直接调用 Dong 对象的方法,会改变 likeSport
中 this
的指向。
那么我们怎么让我们在单击函数的回掉中调用 likeSport
的方法时,likeSport
的方法中的this
仍然指向的是Dong
呢?
这个时候就要用到 call
或者 apply
来解决问题了。
call 和 apply 都是可以指定 function函数运行时,this 的值。两者唯一的区别就是 call 第二个参数接受的是参数列表,而 apply 接受的是一个参数数组。
fun.call(this,tp1,tp2);
fun.apply(this,[tp1,tp2]);
按照以上的知识点来修改我们的代码
$('.father').on('click','.test',function(){
console.log(this); //this 指向的是 test 节点对象
_this.likeSport().call(_this); //这时 likeSport方法中的 this 指向的是 Dong
});
3.使用CSS3 动画性能的问题
为什么使用 css3属性来做动画?使用 css 3做动画有什么好处呢?
我们先借助 chrome 开发者工具对动画渲染做一个检测,先来看使用margin-left
来做动画发生了什么
再来看使用 translate3d
做动画发生了什么
我们可以很明显的看到,在使用 margin-left
做动画的过程中,浏览器每时每刻都在发生渲染操作,而使用 translate3d
只是在开始和结束的时候发生渲染操作。
来看看 csstrigger 网站上对 margin-left 和 transform 的区别:
由上面可以知道,我们在使用 margin-left 这样的属性的时候,会触发页面的重排和重绘,而使用 transform 的时候,可以调用 gpu 对渲染进行帮助。
容易忽略的问题:
1. 在使用 jQuery 或者 Zepto 的 animate 方法做动画的时候,我的代码可能是这样的
test.animate({left:'15px'},1000);
test.animate({transform:'translate3d(0,15px,0)'},1000);
但是根据 API 文档,我们可以直接这样写
test.animate({translate3d:'0,15px,0'},1000);
这种写法比上面的写法简洁一些。
2. 在使用 CSS3 属性做动画的时候,数值要加单位,不然会没有效果,比如下面的代码
var size = 150;
test.animate({'translate3d': '-' + size + ',0,0'},1000)
这样写是正确的:
var size = 150;
test.animate({'translate3d': '-' + size + 'px,0,0'},1000)
4.scroll 滚动动画的问题
我们会有这样的业务场景,需要从页面的最低部返回页面的头部,或者是返回到页面的某个部分。
能够想到的解决方案有两种:
- 使用锚点;
- 使用 js 来滚动页面
使用锚点没有什么可以多说的,也很简单,但是滚动效果比较生硬。使用 js 来滚动页面的话,可以设置滚动动画,来使页面的滚动的效果更加友好。
在网上如果搜索scroll
动画最多的答案就是使用下面这样的代码:
$('.body1').animate({scrollTop:200},2000);
但是我在使用这样代码的时候,却没有出现我想要的效果,最后通过各种尝试还是找到原因的。就是的父级元素没有设置overflow:auto
overflow 这个属性还是很有用的。比如:触发盒子的 BFC
还有就是禁止元素在水平或者竖直方向滚动。
注意:
jQuery
支持这样的滚动动画,但是 Zepto
不支持这个操作滚动动画;
myslide 插件开发知识点总结和 css3 动画性能问题的研究的更多相关文章
- css3动画性能优化--针对移动端卡顿问题
一.使用css,jquery,canvas制作动画 1.Canvas 优点:性能好,强大,支持多数浏览器(除了IE6.IE7.IE8),画出来的图形可以直接保存为 .png 或者 .jpg的图形: 缺 ...
- 关于CSS3动画性能
前天我去面试了...好吧,对于自己6年6份工作的悲催经历,我自己也是醉了. 但没办法,我这种当时上学没好好学习,临毕业才出家写代码的半吊子码农,起步没起好,以至于一直没能找到真正让自己满意的工作. 通 ...
- WEB 移动端 CSS3动画性能 优化
很多时候,我们在开发移动端的时候要使自己的网页兼容不同的机型,很多时候会采用CSS3动画,但是很多时候在安卓机下,动画明显会出现卡顿,很难看,那么这里我介绍几个CSS 属性进行硬件加速那么就会得到明显 ...
- css3动画性能优化
css3的动画简单好用,但是性能方面存在一些问题,很多时候一不留神cpu就已经满了. 现在记下一些常用的技巧,去优化我们的css3的动画. 1. translate3d进行gpu加速 写动画的时候写个 ...
- 被解放的GPU CSS3动画加速
概念 图形处理器( Graphics Processing Unit ) 专门用来处理在个人电脑.工作站或游戏机上图像运算工作 显卡的“心脏” 90%以上的新型台式电脑和笔记本型电脑拥有集成图形处理器 ...
- css3动画与js动画的一些理解
http://zencode.in/19.CSS-vs-JS%E5%8A%A8%E7%94%BB%EF%BC%9A%E8%B0%81%E6%9B%B4%E5%BF%AB%EF%BC%9F.html 首 ...
- CSS3动画和JS动画的比较
前言 之前有被问到一个问题,css3动画和js动画性能谁更好,为什么.据我的经验,当然觉得css3动画性能更好,至于为什么一时还真答不上来,所以特意查了一下资料总结一波. JS动画 优点: js动画控 ...
- CSS3动画(性能篇)
写在前面 高性能移动Web相较PC的场景需要考虑的因素也相对更多更复杂,我们总结为以下几点: 流量.功耗与流畅度. 在PC时代我们更多的是考虑体验上的流畅度,而在Mobile端本身丰富的场景下,需要额 ...
- 关于JS动画和CSS3动画的性能差异
本文章为综合其它资料所得. 根据Google Developer,Chromium项目里,渲染线程分为main thread和compositor thread. 如果CSS动画只是改变transfo ...
随机推荐
- 20175126《Java程序设计》第一周学习总结
# 学号 20175126 <Java程序设计>第一周学习总结 ## 教材学习内容总结 - 1.安装了WINDOS系统的JDK,并学会了利用JDK编写并编译JAVA程序的基本方法. ...
- easyui combobox下拉框文字超出宽度有横向滚轮
//下拉框显示横向滚轮 $(".combo").mouseenter(function(){ $(this).prev().combobox("showPanel&quo ...
- Django自动获取项目中的全部URL
import re from collections import OrderedDict from django.conf import settings from django.utils.mod ...
- 利用Sharding-Jdbc实现分表[z]
[z]https://www.cnblogs.com/codestory/p/5591651.html 你们团队使用SpringMVC+Spring+JPA框架,快速开发了一个NB的系统,上线后客户订 ...
- 【bug小记】应用跳转白屏
tv端项目 测试那边反馈我们的应用跳转到别的应用,再跳转回来会出现白屏的情况. 其实这个原因很简单,就是系统内存不足了把我们的app进程销毁了 所以再回到我们的应用的时候需要重新绘制,而这个" ...
- 特殊篮子问题——C语言暴力破解
You are given N baskets of gold coins. The baskets are numbered from 1 to N. In all except one of th ...
- jsp相关笔记(三)
在往数据库的表中写入数据时,一定要与表中的每一项对应,比如表中有三项,则写入的值也应该是三类: String getTitle=request.getParameter("title&quo ...
- php数组函数有哪些操作?php数组函数的应用
PHP 的数组是一种很强大的数据类型,与此同时 PHP 内置了一系列与数组相关的函数可以很轻易的实现日常开发的功能.但是我发现好像很多小伙伴都忽略了内置函数的作用(比如我自己就编写过一些有关数组操作的 ...
- JavaScript 函数定义和调用
普通的函数定义方法: function abs(x):{ if (x >= 0){ return x; }else { return -x ; } } 两种方法是等价的 var abs = fu ...
- [c#.net]未能加载文件或程序集“”或它的某一个依赖项。系统找不到指定的文件
问题是这样嘀: 项目采用了三层架构和工厂模式,并借鉴了PetShop的架构,因为这个项目也是采用分布式的数据库,目前只有三个数据库,主要出于提高访问性能考虑. 原来是按照网上对PetShop的介绍来给 ...