动画在webapp中的现状
难在何处
动画的挣扎
 var FastRender = new inherit({
   initialize: function(opts) {
     this.handleOpts(opts);
     this.init();
   },
   handleOpts: function(opts) {
     if (!opts || !opts.doms || !opts.doms.length) throw 'FastRender param error';
     this.doms = opts.doms;
     this.container = opts.container || $(window);
     this.renderContainer = {};
     this.step = 50;
   },
   init: function() {
     this.initImgContainer();
     this.initRender();
     this.bindEvents();
   },
   bindEvents: function() {
     //为container绑定事件
     this.container.on('scroll.fastRender', $.proxy(function() {
       this.initRender();
     },
     this));
   },
   initImgContainer: function() {
     var el, i, len, offset;
     for (i = 0, len = this.doms.length; i < len; i++) {
       el = $(this.doms[i]);
       offset = el.offset();
       //这块卡
       //      (function (el) {
       //        setTimeout(function () {
       el.css({
         'width': offset.width,
         'height': offset.height
       });
       //        }, 0);
       //      })(el);
       if (!this.renderContainer[offset.top]) {
         this.renderContainer[offset.top] = [];
       }
       this.renderContainer[offset.top].push(el);
     }
   },
   /*
         这里需要对对象遍历做优化,以坐标搜索替换数值搜索
         */
   initRender: function() {
     var height = this.container.height();
     var srollHeight = this.container.scrollTop();
     var k, _imgs, el, i, len, els;
     this.doms.removeClass('wl');
     for (k in this.renderContainer) {
       //                        if ((parseInt(k) < srollHeight + height + this.step) && (parseInt(k) > srollHeight - this.step)) {
       if ((parseInt(k) < srollHeight + height - this.step) && (parseInt(k) > srollHeight + this.step)) {
         els = this.renderContainer[k];
         for (i = 0, len = els.length; i < len; i++) {
           el = $(els[i]);
           el.find('.lazy_wrapper').show();
         }
       } else {
         els = this.renderContainer[k];
         for (i = 0, len = els.length; i < len; i++) {
           el = $(els[i]);
           el.find('.lazy_wrapper').hide();
         }
       }
     } // for
   },
   destroy: function() {
     //为container绑定事件
     this.container.off('.fastRender');
   }
 });
 var f = new FastRender({
   doms: $('.js_hotel_detail')
 });
这个demo想法很美好,若是可实现的话,无疑是移动端一大功臣,事实上是
浏览器:10分
IOS(4000):6分
android小米(1800):5分
化为4核:4分(1800)
其表现在浏览器上很好,手机上便不行了,所以今日的论证失败,该方案还需优化
这个结果其实可以预见,在渲染上手机根本跟不上,所以平滑度就跟不上,方案抛弃
换个方向想,若是可以绕过DOM树过多问题也是可取,比如移动时候直接以一个白页做动画,这个方案比较可耻
另一个方案是使用cavas为本页面生成一个缩略图,每次移动实际上是缩略图,如此动画是顺畅了,但是此方案甚难,还可能引起其它问题,此方案我得再做验证
结局
结局并不美好,此问题我未找到很好的解决方案,移动端的动画还有很长的路要走......
动画在webapp中的现状的更多相关文章
- 【HTML5&CSS3进阶04】CSS3动画应该如何在webapp中运用
		动画在webapp的现状 webapp模式的网站追求的就是一个体验,是HTML5&CSS3浪潮下的产物,抛开体验不说,webapp模式门槛比较高: 而体验优化的一个重点便是动画,可以说动画是w ... 
- WebApp中的页面生命周期及路由管理
		最近切换到一个新项目,使用的技术栈是Require+Backbone,鉴于对鞋厂webapp框架的了解,发现这个新项目有些缺陷,主要是单纯依赖Backbone造成的,也就是Backbone的好和坏都在 ... 
- tomcat中session在两个webapp中实现共享
		现在遇到一个需求就是要求完成简单的单点登录,通过在一个tomcat实例中放置两个webapps应用ROOT应用和CEO应用来完成在ROOT应用登录后,在CEO可以直接使用,而未在ROOT应用登录时,不 ... 
- [Swift实际操作]八、实用进阶-(3)闭包在定时任务、动画和线程中的使用实际操作
		闭包的使用相当广泛,它是可以在代码中被传递和引用的具有独立功能的模块.双击打开之前创建的空白项目.本文将演示闭包在定时任务.动画和线程中的使用.在左侧的项目导航区,打开视图控制器的代码文件:ViewC ... 
- 零元学Expression Blend 4 - Chapter 41 Flash做的到的Blend也可以!轻松制作拥有动画的MenuBar!(中)
		原文:零元学Expression Blend 4 - Chapter 41 Flash做的到的Blend也可以!轻松制作拥有动画的MenuBar!(中) 我们接着进行动画MenuBar的制作 接续着上 ... 
- 如何在webapp中做出原生的ios下拉菜单效果
		github:https://github.com/zhoushengmufc/iosselect webapp模仿ios下拉菜单 html下拉菜单select在安卓和IOS下表现不一样,iossel ... 
- tomcat ROOT中的lib和webapp中的lib的作用
		相同点:都是用来存放jar包的 不同点:和webapps同个目录下的那个lib文件夹所放的jar包对tomcat 服务器和你的webapp 来说都是可以调用的(这时候假如tomcat和web都依赖某个 ... 
- webapp中的meta
		<!--开发后删除--> <meta http-equiv="Pragma" name="no-store" /><!--必须联网 ... 
- fakeLoader.js-针对WebApp中的 “假”预加载
		在做移动端网站的时候,前端有时候需要一些过渡效果,当然我们肯定首先想到肯定是用css3做一个过渡动画,nice,那我给大家一个好用的jQuery插件吧,让你三行代码实现这种过渡动画效果. 1.由于该插 ... 
随机推荐
- SQL Server 跨网段(跨机房)复制
			一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 解决方案(Solution) 搭建过程(Process) 注意事项(Attention) 参考 ... 
- 解密jQuery内核 DOM操作
			jQuery针对DOM操作的插入的方法有大概10种 append.prepend.before.after.replaceWith appendTo.prependTo.insertBefore.in ... 
- jQuery源码分析系列(30) : Ajax 整体结构
			开头引用一段 想起一句话:前端研究,研究个屁~ 的确如此呀.补充下联:前端设计,设计个屁~ 前端目前最大的困境是,如 HTML 一样,无论你承不承认,市场上并不太需要 HTML 高手 其实这里引发一个 ... 
- ASP.NET MVC5 网站开发实践 - 概述
			前段时间一直在用MVC4写个网站开发的demo,由于刚开始学所有的代码都写在一个项目中,越写越混乱,到后来有些代码自己都理不清了.1月26日晚上在群里跟@怒放 他们讨论这个问题,结论是即使只是一个小d ... 
- 深入理解脚本化CSS系列第四篇——脚本化样式表
			× 目录 [1]CSSStyleSheet [2]CSSRule 前面的话 关于脚本化CSS,查询样式时,查询的是计算样式:设置单个样式时,设置的是行间样式:设置多个样式时,设置的是CSS类名.脚本化 ... 
- C++中public、protected及private用法
			转自:http://www.jb51.net/article/54224.htm 初学C++的朋友经常在类中看到public,protected,private以及它们在继承中表示的一些访问范围,很容 ... 
- ASP.NET中使用HttpWebRequest调用WCF
			最近项目需要和第三网站进行数据交换,第三方网站基本都是RESTfull形式的API,但是也有的是Web Service,或者.NET里面的WCF.微软鼓励大家使用WCF替代Web Service. W ... 
- Jquery通过Ajax方式来提交Form表单
			今天刚好看到Jquery的ajax提交数据到服务器的方法,原文是: 保存数据到服务器,成功时显示信息. jQuery 代码: $.ajax({ type: "POST", url: ... 
- jar包依赖性查询
			项目中碰到jar包冲突,需要排除一些jar包时先要了解jar的依赖关系,maven提供了命令行来查询: mvn dependency:tree 返回依赖的属性结构 
- canvas 图片拖拽旋转之一——坐标转换translate
			引言 对canvas中绘制的图片进行旋转操作,需要使用ctx.translate变换坐标系,将图片旋转的基点设为坐标系的原点,然后ctx.rotate旋转. 这个时候,因为canvas坐标系发生了旋转 ... 
