mmb小结
来源:互联网 发布:库里生涯场均数据 编辑:程序博客网 时间:2024/05/16 19:05
我喜欢记录自己学习工作过程中遇到的方法,码段。自己本身是记忆力极差的人,像极了七秒记忆的鱼,很多知识都是看了忘,忘了查。本身工作就是极具记忆和逻辑,而且前端发展极快,时刻感觉自己疲惫不堪,在不恰当的时间抱怨一番。希望通过积累,丰富自己,做得更好。
(一)template模板引擎
artTemplate的库分为两种,一个是template.js,一个是template-native.js
第一种是简洁语法,第二种是原生语法。我自己用的是第一种:
基本语法:
html:
<script type="text/html" id="nav"> {{ each result as value i}} <a href="{{ value.titlehref }}" class="col-xs-3 nav-more-hide"> <div> {{ #value.img }} </div> <p>{{ value.name }}</p> </a> {{ /each }}</script>
js:
data的结构:
{result: [{img:"<img src="images/ic_search.png" alt="比价搜索">"indexmenuId:0}]}
渲染模板:
var html = template('nav', data);$('.m-nav .row').html(html);
上边是放在html中的用法,还有放在js文件中的用法,需要提供变量来保存模板:
var apply_list = '{{each list as his}}'+ '<li data-apply-id="{{his.id}}">'+ '<ul class="shop-attr-lst group">'+ '<li>店铺名:<a href="javascript:;">{{his.shop_name}}</a></li>'+ '<li>账户余额:{{his.shop_balance}}元</li>'+ '</ul>'+ '</li>'+ '{{/each}}';var data = { list:[ {"id":1,"shop_name":"123","shop_balance":5000}, {"id":2,"shop_name":"12344","shop_balance":500} ]}var render = template.compile(apply_list);var html = render(data);$("#content").html(html);
(二)巧用css3选择器技巧:
.m-nav a:nth-last-child(-n+4){ display: none;}
上述代码的作用:隐藏最后的4项
与js代码共同作用,控制点击显示隐藏效果:
$('.nav-more-hide:nth-last-child(-n+4)').toggle()
(三):优化加载列表:点击,没有就加载,已经加载过就不再请求,直接渲染
if($(that).find('li').attr('class')=='two'){ return; }
注意点:这里有一个小坑,可能我对find的理解不够,当时直接这样使用,结果发现它打印了自身,导致判断条件的失效。
// console.log($(that).find('li')); 不能这样写,会打印本身
(四):选择列表切换,请求优化
有很多方法,我在此项目分类页面用的是在内存中定义对象进行保存数据来优化。
定义:
var olddata = {}, key, data = null;
存储:
key = param + '-' + $('.page select').val();olddata[key] = data;
判断:
if (olddata[key]) { // console.log(olddata[key]); // 更新内容 data = olddata[key]; // $('.list-main').empty(); var html = template('product', data); $('.list-main').html(html); document.body.scrollTop = 0; return; } else { ajax({ url: 'http://192.168.15.128:3000/api/getproductlist', data: {"categoryid": param, pageid: $('.pageselect').val()}, success: function (data) { key = param + '-' + $('.page select').val(); olddata[key] = data; // console.log(olddata); // console.log(data); $('.list-main').empty(); var html = template('product', data); $('.list-main').html(html); document.body.scrollTop = 0; } })
用这种方法,也不会请求ajax:window.history.go(-1);
(五):懒加载
通过scrollTop,判断触底距离,进而判断是否请求
由于项目要求数据一次请求,减轻服务器压力,所以我做了一个假的懒加载。
var top, lHgt, height; $(window).scroll(function () { top = document.documentElement.scrollTop || document.body.scrollTop; // 判断共加载的距离 if (top > 4800) { return; } lHgt = $('.m-main li')[0].offsetHeight; height = $('.m-main .list').height(); console.log(height); // 判断是否快要触底 var pd = true; if( pd == false)return; if ((height - top) <= (lHgt * 3)) { ajax({ url: 'http://192.168.15.76:3000/api/getinlanddiscount', success: function (data) { pd = false; var html = template('con', data); $('.m-main .list').append(html); //延时500,加载内容 setTimeout(function () { pd = true; },500) } }) } })
(六:导航栏滑动)
需求:touch滑动,点击请求数据并定位
function Swipe(){ /*通过封装的swipe插件来实现*/ iScroll({ swipeDom:document.querySelector('父对象'),/*父容器对象*/ swipeType:'y',/*滑动的方向*/ swipeDistance:100/*缓冲的距离*/ });}
手写代码实现,无缓冲滑动功能:// 滑动效果实现 var oldX = 0; var newX = 0; var touchMoveWidth = 0; var currX = 0; $('.tabs ul')[0].addEventListener('touchstart', function (e) { oldX = e.touches[0].clientX; }); $('.tabs ul')[0].addEventListener('touchmove', function (e) { var offsetLeft = $('.tabs ul').offset().left; newX = e.touches[0].clientX; touchMoveWidth = newX - oldX; // console.log(offsetLeft); // 限定边界值 if(offsetLeft + currX + touchMoveWidth >= 0){ currX = -offsetLeft-touchMoveWidth; } if(offsetLeft + currX + touchMoveWidth <= -width){ currX = -width - touchMoveWidth -offsetLeft; } // 定位 // currX = currX + touchMoveWidth; 不能在这里改变它,因为是实时的 if ((offsetLeft + currX + touchMoveWidth <= 0) && (offsetLeft + currX + touchMoveWidth >= -width)) { $('.tabs ul').css('transform', "translateX(" + (currX + touchMoveWidth) + "px)"); $('.tabs ul').css('webkitTransform', "translateX(" + (currX + touchMoveWidth) + "px)"); } }); $('.tabs ul')[0].addEventListener('touchend', function (e) { // 判断当前点击的对象 定位ul // 在点击事件中进行定位 // 当前移动的位置 // $('.tabs ul').css('transform', "translateX(" + (currX) + "px)"); // 重置 不重置currX currX = currX + touchMoveWidth; oldX = 0; newX = 0; touchMoveWidth = 0; }); // 要绑定在这里 // 点击切换内容 $('.tabs a').click(function () { var param = $(this).attr('title')-0; // 定位 var index = $(this).parent().index(); // console.log(index); var distance = 0; for(var i =0;i<index;i++){ distance += $('.tabs li')[i].offsetWidth; } // 限定范围 // 屏幕宽度 var screenW = window.screen.width; console.log(width); if(distance>=(width-screenW)){ distance=(width-screenW) } // 添加位移 $('.tabs ul').css('transform', "translateX(" + (-distance) + "px)"); // 请求对应数据 调用封装的ajax ajax()
0 0
- mmb小结
- MMB互助
- HI3520D 视频编码发送引起 MMB LEAK
- Oracle Developer 2000 批量编译pll、frm、mmb、rdf文件
- 中国手机电视国家标准终于确定:T-MMB !, 但CMMB能答应吗?
- 对峙T-MMB广电总局加速布网CMMB 已占市场先机
- Oracle Developer 2000 批量编译pll、frm、mmb、rdf文件, 编译后的文件名后缀plx、fmx、mmx、rep
- 小结!
- 小结
- 小结
- 小结
- 小结
- 小结
- 小结
- 小结
- 小结
- 小结
- 小结
- Sum of Left Leaves
- 谈谈MVC模式
- 颜色校准总结
- Vue学习之路---No.3(分享心得,欢迎批评指正)
- git 在github上托管代码
- mmb小结
- pta--5-4 逢7击掌 (15分)
- Java多线程----java 对象锁
- WM_PAINT消息
- C/C++指针的作用
- USENET简介
- Java编程思想学习笔记(1)---对象导论
- 初识Android二之小试牛刀模仿实现qq登陆界面
- maprecuce系列(4)——reduce端join算法实现