当前位置:  编程技术>WEB前端
本页文章导读:
    ▪javascript【AMD模块加载器】浅析V2(整合DOM ready)      如果你还不了解AMD模块加载器,可以先看看我的前一篇文章,之后又在其基础上做了一点小修改。  主要是修改了检测循环依赖的函数,不在遍历对象。第二就是加入了模块配置方法。以.........
    ▪斐波那契的javascript实现和优化      斐波那契是1,1,2,3,5,8,13,21。。。。。 即前两项之和为第三项。程序实现如下普通版的斐波那契:<script type="text/javascript">function f(num){  if(num<=0) {    console.log('.........
    ▪PhpWind系统的帖子评价功能使用       此为7.5的一个新功能,方便用户对站点内容进行评价;配备积分奖惩设置,在评价基础上进一步激发用户的评价积极性;更关联评价热榜,站长或其他具有管理权限的会员可查看站点内容评.........

[1]javascript【AMD模块加载器】浅析V2(整合DOM ready)
    来源:    发布时间: 2013-11-06

如果你还不了解AMD模块加载器,可以先看看我的前一篇文章,之后又在其基础上做了一点小修改。  

主要是修改了检测循环依赖的函数,不在遍历对象。

第二就是加入了模块配置方法。以及将lynxcat更名为lynx。

还有就是为模块加入了dom ready机制。

var ready = function (){
var isReady = false;
var readyList = [];
var ready = function(fn){
if(isReady){
fn();
}else{
readyList.push(fn);
}
};

var fireReady = function(){
for(var i = 0,len = readyList.length; i < len; i++){
readyList[i]();
}
readyList = [];
lynx.modules.ready.state = 2;
checkLoadReady();
};

var bindReady = function(){
if(isReady){
return;
}
isReady=true;
fireReady();
if(doc.removeEventListener){
doc.removeEventListener("DOMContentLoaded",bindReady,false);
}else if(doc.attachEvent){
doc.detachEvent("onreadystatechange", bindReady);
}
};

if( doc.readyState === "complete" ) {
bindReady();
}else if(doc.addEventListener){
doc.addEventListener("DOMContentLoaded", bindReady, false);
}else if(doc.attachEvent){
doc.attachEvent("onreadystatechange", function(){
if((/loaded|complete/).test(doc.readyState)){
bindReady();
}
});
(function(){
if(isReady){
return;
}
var node = new Image();
var timer = setInterval(function(){
try{
isReady || node.doScroll('left');
node = null;
}catch(e){
return;
}
clearInterval(timer);
bindReady();
}, 16);
}());
}
return ready;
}()

关于ready方法,其实很简单。 首先是提供一个方法,把用户的ready的方法存入一个callbacks数组里。 然后在检测到dom ready的时候执行callbacks里面的数组,如果是在dom ready之后传入ready的callback就直接执行。  具体检测dom ready就需要看浏览器的支持了,如果是支持标准w3c规范的浏览器DOMContentLoaded 方法,IE则支持onreadystatechange方法。 还可以利用的一个特性就是 doScroll要求最初的文档被完全加载。否则就会出错。 这样一来我们就可以用setInterval方法来不断的检测doScroll是否出错,如果不出错。那么代表文档已经加载完成了。  总体来说ready方法还是很简单的。

然后说说如何把ready整合到模块中。  首先我想到的是,在require中判断是否已经dom ready如果没有就把当前的require传入到ready方法。 也就是说,这个方法是让页面ready完成后在加载模块。  然后这样有一个坏处就是没有充分利用dom ready的这段时间。  后来看了一下别人的实现,又自己思索了一下。   决定把ready作为一个AMD模块放入到框架中。这样一来就就可以用模块加载的原理来处理了。  如果某个模块依赖ready,就一定要在ready之后才执行它的factory方法。   具体实现的方式是将ready作为一个基准模块写入到modules中,不过它不用被加载。而是在检测dom ready之后就将modules中的ready状态改为2。并检测一下是否所有模块都被加载完毕。这样一来就可以将dom加载的这段时间用来加载模块了。 

然而这样一来就又有一个新的bug在里面,就是如果用户真的想加载一个ready方法的时候就会被误认为是dom ready。 关于这点目前还没想到什么办法,不过用户可以通过写url而不是写ready这样的名字来加载。  在下一版的加载器中我会加入部模块自动加前缀来解决这个问题。还有会加入控制并发数。以及对模块合并的简单说明。

以下是全部源码。

;(function(win, undefined){
win = win || window;
var doc = win.document || document,
head = doc.head || doc.getElementsByTagName("head")[0],
hasOwn = Object.prototype.hasOwnProperty,
slice = Array.prototype.slice,
configure = {},
basePath = (function(nodes){
var node, url;
if(configure.baseUrl){
node = nodes[nodes.length - 1];
url = (node.hasAttribute ? node.src : node.getAttribute("src", 4)).replace(/[?#].*/, "");
}else{
url = configure.baseUrl;
}
return url.slice(0, url.lastIndexOf('/') + 1);
}(doc.getElementsByTagName('script'))),
_lynx = win.lynx;


    
[2]斐波那契的javascript实现和优化
    来源:    发布时间: 2013-11-06

斐波那契是1,1,2,3,5,8,13,21。。。。。 即前两项之和为第三项。程序实现如下

普通版的斐波那契:

<script type="text/javascript">
function f(num)
{

  if(num<=0)

 {

    console.log('请输入大于0的正整数');
      return ; 

  }

   else if(num<=2 && num>0)
  {
     return 1;
 }
   else
 {
  return f(num-2)+f(num-1);
   }
}

</script>

用三目运算符优化如下:

<script type="text/javascript">
function f(num)
{

    if(num<=0)
   {
      console.log('请输入大于0的正整数');
      return ; 
    }
  return num<=2 && num>0 ? 1 : f(num-1)+f(num-2);
}


</script>

但是这样函数内部调用了函数的名称,假设该函数要改名,那就相当不完善了,函数内部和函数名紧紧耦合在一起了。所以可以用arguments.callee来表示该函数本身

进一步优化如下

<script type="text/javascript">
function f(num)
{

    if(num<=0)
   {
      console.log('请输入大于0的正整数');
      return ;
    }

  return num<=2 && num>0 ? 1 : arguments.callee(num-1)+arguments.callee(num-2);
}


</script>

至此,简单的优化就做成了。

本文链接


    
[3]PhpWind系统的帖子评价功能使用
    来源: 互联网  发布时间: 2013-11-06
此为7.5的一个新功能,方便用户对站点内容进行评价;配备积分奖惩设置,在评价基础上进一步激发用户的评价积极性;更关联评价热榜,站长或其他具有管理权限的会员可查看站点内容评价情况,为站点运营提供有利参考。
 
设置路径:
1. 应用中心->插件中心->评价管理,开启并进行详细设置;
 
2. 内容版块->版块管理->管理版块 开启帖子评价功能
 
 
评价拥有内容分部管理功能,支持全局、版块开关;同时也将评价权限细化到各个用户组,灵活应对站点特殊需求,满足各种站点需求。
各评价项可自定义图片,将图片上传至/hack/rate/image,并修改对应评价项的图片名称即可。
 
前台评价效果:
作者:CA7CBBF04A1C 发表于2013-3-11 12:25:58 原文链接
阅读:67 评论:0 查看评论

    
最新技术文章:
 




特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3