抛物线加入购物车的特效动画(支持ie7以上,移动端表现良好)
    1.引用一个极小的jquery插件库
    2.启动 设置 起点 终点 和完成后回调函数

1.插件地址 git-hub上的官方主页 https://github.com/amibug/fly

引入具体文件:

(function () {
var lastTime = ;
var vendors = ['webkit', 'moz'];
for (var x = ; x < vendors.length && !window.requestAnimationFrame; ++x) {
window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];
window.cancelAnimationFrame =
window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];
} if (!window.requestAnimationFrame){
window.requestAnimationFrame = function (callback, element) {
var currTime = new Date().getTime();
var timeToCall = Math.max(, - (currTime - lastTime));
var id = window.setTimeout(function () {
callback(currTime + timeToCall);
},
timeToCall);
lastTime = currTime + timeToCall;
return id;
};
}
if (!window.cancelAnimationFrame){
window.cancelAnimationFrame = function (id) {
clearTimeout(id);
};
}
}()); /*! fly - v1.0.0 - 2014-12-22
* https://github.com/amibug/fly
* Copyright (c) 2014 wuyuedong; Licensed MIT */
!function(a){a.fly=function(b,c){var d={version:"1.0.0",autoPlay:!,vertex_Rtop:,speed:1.2,start:{},end:{},onEnd:a.noop},e=this,f=a(b);e.init=function(a){this.setOptions(a),!!this.settings.autoPlay&&this.play()},e.setOptions=function(b){this.settings=a.extend(!,{},d,b);var c=this.settings,e=c.start,g=c.end;f.css({marginTop:"0px",marginLeft:"0px",position:"fixed"}).appendTo("body"),null!=g.width&&null!=g.height&&a.extend(!,e,{width:f.width(),height:f.height()});var h=Math.min(e.top,g.top)-Math.abs(e.left-g.left)/;h<c.vertex_Rtop&&(h=Math.min(c.vertex_Rtop,Math.min(e.top,g.top)));var i=Math.sqrt(Math.pow(e.top-g.top,)+Math.pow(e.left-g.left,)),j=Math.ceil(Math.min(Math.max(Math.log(i)/.-,),)/c.speed),k=e.top==h?:-Math.sqrt((g.top-h)/(e.top-h)),l=(k*e.left-g.left)/(k-),m=g.left==l?:(g.top-h)/Math.pow(g.left-l,);a.extend(!,c,{count:-,steps:j,vertex_left:l,vertex_top:h,curvature:m})},e.play=function(){this.move()},e.move=function(){var b=this.settings,c=b.start,d=b.count,e=b.steps,g=b.end,h=c.left+(g.left-c.left)*d/e,i===b.curvature?c.top+(g.top-c.top)*d/e:b.curvature*Math.pow(h-b.vertex_left,)+b.vertex_top;if(null!=g.width&&null!=g.height){var j=e/,k=g.width-(g.width-c.width)*Math.cos(j>d?:(d-j)/(e-j)*Math.PI/),l=g.height-(g.height-c.height)*Math.cos(j>d?:(d-j)/(e-j)*Math.PI/);f.css({width:k+"px",height:l+"px","font-size":Math.min(k,l)+"px"})}f.css({left:h+"px",top:i+"px"}),b.count++;var m=window.requestAnimationFrame(a.proxy(this.move,this));d==e&&(window.cancelAnimationFrame(m),b.onEnd.apply(this))},e.destory=function(){f.remove()},e.init(c)},a.fn.fly=function(b){return this.each(function(){void ==a(this).data("fly")&&a(this).data("fly",new a.fly(this,b))})}}(jQuery);

lib.js

 2.启动动画  

 .flyer{
position: fixed;
z-index: 999;
width: 20px;
height: 20px;
}
//设置z-index让元素显示在最前面以免被覆盖 //结束点(浮动的底部栏) 所以获取endedY为当前屏幕高度
var endedY=$(window).height();
var endedX = $('#end').offset(); var flyer = $('<img class="flyer" src="data:images/plus_circle.png" />');
//或者flyer=$('#fly'); 选页面某个想要飞翔的元素也可以 $(body).on('click','.plus_circle',function(e){
flyer.fly({
start: {
left: e.clientX-15,
top: e.clientY-15
},
end: {
left:offset.left,
top:endedY-30,
width: 20,
height: 20
},
onEnd:function(){
this.destory();
//完成后销毁实例,移除dom,不销毁flyer会一直停留在它的终点
}
}); });

 直接演示:http://codepen.io/hzxs1990225/full/ogLaVp

  note:

  1.对于事件的定位:  

 function(event){
event.pageX;event.pageY; event.screenX;event.screenY; event.clientX;event.clientY;
}

    screenX:鼠标位置相对于用户屏幕水平偏移量 会算上浏览器导航栏

clientX:参照点是浏览器内容区域的左上角,该参照点会随之滚动条的移动而移动

pageX:(不支持ie78,9以上ok)参照点也是浏览器内容区域的左上角,但它不会随着滚动条而变动(就如单词page而言,始终是对应页面的位置)

所以页面内容过长超过了页面高度,出现了滚动条时,获取出发点的相对于屏幕的坐标 使用clientX

原理为:
    var doc = document.documentElement,body=document.body;
    pageX = clientX + Math.max(doc.scrollLeft,body.scrollLeft);
    pageY = clientY  + Math.max(doc.scrollTop,body.scrollTop);

顺带一提还有不常用不适用的offsetX 和layerX
    offsetX:IE特有,鼠标相比较于触发事件的元素的位置,以元素盒子模型的内容区域的左上角为参考点,如果有boder,可能出现负值。IE以内容区域开始,鼠标向上进入border将出现负值。

layerX:FF特有,鼠标相比较于当前坐标系的位置,即如果触发元素没有设置绝对定位或相对定位,以页面为参考点,如果有,将改变参考坐标系,从触发元素盒子模型的border区域的左上角为参考点

具体的浏览器支持对比为    
    offsetX/offsetY:        W3C- IE+ Firefox- Opera+ Safari+ chrome+
    x/y:                   W3C- IE+ Firefox- Opera+ Safari+ chrome+
    layerX/layerY:         W3C- IE- Firefox+ Opera- Safari+ chrome+
    pageX/pageY:           W3C- IE- Firefox+ Opera+ Safari+ chrome+
    clientX/clientY:       W3C+ IE+ Firefox+ Opera+ Safari+ chrome+
    screenX/screenY:       W3C+ IE+ Firefox+ Opera+ Safari+ chrome+

2.对于元素的定位

  获取当前窗口可视区域的高度(当前手机屏幕的高度)$(window).height()

$(document).height()); //浏览器当前窗口文档的高度
    $(document.body).height();//浏览器当前窗口文档body的高度
    $(document.body).outerHeight(true);//浏览器当前窗口文档body的总高度 包括border padding margin
    同理宽度换用width

var end = $('#end').offset(); end.left; end.top;
    元素相对于页面上的位置(参照物和事件触发的pageX参照物同理)
    所以这里有一些需要考虑的问题:若该元素是fixed定位的(比如说顶部栏和底部栏,一旦页面出现滚动条)
    滚动时end.top会不断增加,相对屏幕的左上角位置是end.top-scrollTop
    或者不依据元素定位而根据当前可视区域高度自己去增减为当前fixed元素在屏幕上位置,做到始终跟随

顺便放一些原生dom对象的一些参数
     网页可见区域宽: document.body.clientWidth
  网页可见区域高: document.body.clientHeight
  网页可见区域宽: document.body.offsetWidth (包括边线的宽)
  网页可见区域高: document.body.offsetHeight (包括边线的高)
  网页正文全文宽: document.body.scrollWidth
  网页正文全文高: document.body.scrollHeight
  网页被卷去的高: document.body.scrollTop
  网页被卷去的左: document.body.scrollLeft
  网页正文部分上: window.screenTop
  网页正文部分左: window.screenLeft
  屏幕分辨率的高: window.screen.height
  屏幕分辨率的宽: window.screen.width
  屏幕可用工作区高度: window.screen.availHeight
  屏幕可用工作区宽度: window.screen.availWidth

clips 前端 js 动画 抛物线加入购物车的更多相关文章

  1. 前端js动画收藏

    值得收藏的动画

  2. clips 前端 js 单选按钮与输入框 的配合变化

    情形1: 一对单选按钮 一个输入框组 输入框组随单选按钮的改变而替换文字或执行其它 片段属于 介绍单选框的基本使用方式  : 1.单选框是有分类的,每个单选框有自己所属的组 从而一个页面可以拥有多组单 ...

  3. clips 前端 js 倒计时 获取验证码的按钮

    <a href="javascript:void(0);" onclick="get_captcha()" class="btn btn-def ...

  4. 前端制作动画的几种方式(css3,js)

    制作动态的网页是是前端工程师必备的技能,很好的实现动画能够极大的提高用户体验,增强交互效果,那么动画有多少实现方式,一直对此有选择恐惧症的我就总结一下,以便在开发的时候选择最好的实现方式. 1.css ...

  5. 前端(十六)—— JavaScript盒子模型、JS动画、DOM、BOM

    JS盒子模型.JS动画.DOM.BOM 一.JS盒模型 1.width | height parseInt(getComputedStyle(ele, null).getPropertyValue(' ...

  6. JavaScript是如何工作的: CSS 和 JS 动画底层原理及如何优化它们的性能

    摘要: 理解浏览器渲染. 原文:JavaScript是如何工作的: CSS 和 JS 动画底层原理及如何优化它们的性能 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 这是专门探索 J ...

  7. Web高性能动画及渲染原理(1)CSS动画和JS动画

    目录 一. CSS动画 和 JS动画 1.1 CSS动画 1.2 JS动画 1.3 小结 二. 使用Velocity.js实现动画 示例代码托管在:http://www.github.com/dash ...

  8. 高性能Web动画和渲染原理系列(1)——CSS动画和JS动画

    [摘要] 介绍CSS动画和JS动画的基本特点,以及轻量级动画库velocity.js的基本用法. 示例代码托管在:http://www.github.com/dashnowords/blogs 博客园 ...

  9. 解读前端js中签名算法伪造H5游戏加分

    信息安全在我们日常开发中息息相关,稍有忽视则容易产生安全事故.对安全测试也提出更高要求.以下是笔者亲自实践过程: 一. 打开某个数钱游戏HTML5页面,在浏览器 F12 开发工具中,查看的js,如下, ...

随机推荐

  1. dts--tests(三)

    sample_built.py """ DPDK Test suite. Test sample_built. """ import uti ...

  2. 用js控制单选框或者多选框问题

    出现如图问题时,这时不能用attr方法添加checked属性了,改用$( "input" ).prop( "checked", true ),完美解决.

  3. No module named 'PyQt5.sip'

    使用pyinstaller打包python文件为windows可执行程序可能遇到的问题 pyinstaller yourprogram.py打包的程序双击打开一闪而过,提示上面标题的错误 把pycom ...

  4. Skyscrapers Covered in Solar Pancels【太阳能电池板覆盖的摩天大楼】

    Skyscrapers Covered in Solar Panels An office tower on Miller Stree in Manchester is completely cove ...

  5. Makefile (2) gdb

    gdb调试 1.用debug的方式编译 -g 2.打上断点 3.单步调试 step into 进入函数里面 step over 运行整个函数 step return 跳出当前函数 4.继续运行 5.打 ...

  6. Android面试收集录7 AsyncTask详解

    1.Android中的线程 在操作系统中,线程是操作系统调度的最小单元,同时线程又是一种受限的系统资源,即线程不可能无限制地产生, 并且 **线程的创建和销毁都会有相应的开销.**当系统中存在大量的线 ...

  7. 3 web框架

    web框架 Web框架(Web framework)是一种开发框架,用来支持动态网站.网络应用和网络服务的开发.这大多数的web框架提供了一套开发和部署网站的方式,也为web行为提供了一套通用的方法. ...

  8. [bzoj2733]永无乡&&[bzoj3545]Peaks

    并不敢说完全会了线段树合并,只是至少知道原理写法了...还是太菜了,每天被大佬吊锤qwq 我看到的几道线段树合并都是权值线段树的合并.这个算法适用范围应该只是01线段树的. 这两道算入门题了吧... ...

  9. 第四模块:网络编程进阶&数据库开发 练习

    练习题 基于queue模块实现线程池 import threading from multiprocessing import Queue class A(threading.Thread): def ...

  10. java 中实体Bean和Map互相转化

    技术交流群: 233513714 // 将一个map对象转化为bean public static void transMap2Bean(Map<String, Object> map, ...