#2110
展开↯#2111
作者:广西南宁市
纯css实现点击特效
CSS里的:target伪选择器
:target是CSS里一个非常有趣的伪选择器。它在CSS里发生效力的过程是这样的:当浏览器地址里的hash(地址里#号后面的部分)和:target伪选择器指定的ID匹配上时,它的样式就会在这个ID元素上生效。让我们看一看这个:target伪选择器是如何起作用的:
观看演示
HTML代码
下面的两个HTML元素上我们都指定了ID:
注意上面元素的ID值,当:target指定的ID和window.location.hash值一致时,伪选择器的样式将会生效。
CSS代码
当window.location.hash是”section2″时,ID为”section2″的元素将会变红,并显示下划线。简单吧!很像使用了CSS动画技术,你甚至可以在这种效果上做出动画。
:target非常有趣,但我们还没有发现多少人使用这种技术。其实,如果不是太注重动态效果,使用这种浏览器原生技术来修饰你的应用是不错的选择。
怎么用纯css实现和按钮一样的点击一次,然后改变样式?听说是用伪元素target,不过我不知道怎么操作
visited的方法前面的小伙伴已经讲了;那我还是帮你搞懂伪元素 target 的用法吧。学东西毕竟得踏踏实实,搞懂想要的再去学新的。:target伪选择器指定的ID匹配上时,它的样式就会在这个ID元素上生效。
Run code
Cut to clipboard
CSS里的:target伪选择器
:target是CSS里一个非常有趣的伪选择器。它在CSS里发生效力的过程是这样的:当浏览器地址里的hash(地址里#号后面的部分)和:target伪选择器指定的ID匹配上时,它的样式就会在这个ID元素上生效。让我们看一看这个:target伪选择器是如何起作用的:
观看演示
HTML代码
下面的两个HTML元素上我们都指定了ID:
<h2 id="section1">Section 1</h2>
<h2 id="section2">Section 2</h2>
Run code
Cut to clipboard
注意上面元素的ID值,当:target指定的ID和window.location.hash值一致时,伪选择器的样式将会生效。
CSS代码
:target伪选择器可以配合CSS类、网页标记和任何其它CSS选择器使用:
/* would apply to all targetted elements */
:target {
color: #000;
}
/* applies to H2's */
h2:target {
color: #f00;
}
Run code
Cut to clipboard
当window.location.hash是”section2″时,ID为”section2″的元素将会变红,并显示下划线。简单吧!很像使用了CSS动画技术,你甚至可以在这种效果上做出动画。
:target非常有趣,但我们还没有发现多少人使用这种技术。其实,如果不是太注重动态效果,使用这种浏览器原生技术来修饰你的应用是不错的选择。
文章:常用html、demo代码 发表时间:2016-10-08, 09:48:17
#2112
作者:广西南宁市
纯css3自适滑动选项卡
用input标签实现css3点击
用input标签实现css3点击
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
<style>
html,
body { height: 100%; position: relative; overflow: hidden; margin: 0; }
div { position: absolute; top: 0; left: 0; width: 100%; height: 100%; transition: transform 0.4s ease; transform: translateX(-100%); }
div:after { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); font-size: 5vw; font-family: 'Oswald', sans-serif; text-transform: uppercase; color: #fdfdfd; letter-spacing: 4px; }
div:nth-of-type(1) { background-color: #1abc9c; }
div:nth-of-type(1):after { content: "#1abc9c"; }
div:nth-of-type(2) { background-color: #2ecc71; }
div:nth-of-type(2):after { content: "#2ecc71"; }
div:nth-of-type(3) { background-color: #3498db; }
div:nth-of-type(3):after { content: "#3498db"; }
div:nth-of-type(4) { background-color: #e74c3c; }
div:nth-of-type(4):after { content: "#e74c3c"; }
div:nth-of-type(5) { background-color: #34495e; }
div:nth-of-type(5):after { content: "#34495e"; }
div:nth-of-type(6) { background-color: #9b59b6; }
div:nth-of-type(6):after { content: "#9b59b6"; }
div:nth-of-type(7) { background-color: #f1c40f; }
div:nth-of-type(7):after { content: "#f1c40f"; }
div:nth-of-type(8) { background-color: #e67e22; }
div:nth-of-type(8):after { content: "#e67e22"; }
input[type="radio"] { position: absolute; right: 0; width: 25%; height: 20px; outline: 20px solid; outline-offset: -10px; margin: 0; z-index: 1; cursor: pointer; }
input[type="radio"]:nth-of-type(1) { outline-color: #1abc9c; left: 0%; }
input[type="radio"]:nth-of-type(2) { outline-color: #2ecc71; left: 25%; }
input[type="radio"]:nth-of-type(3) { outline-color: #3498db; left: 50%; }
input[type="radio"]:nth-of-type(4) { outline-color: #e74c3c; left: 75%; }
input[type="radio"]:nth-of-type(5) { outline-color: #34495e; left: 0%; bottom: 0px; }
input[type="radio"]:nth-of-type(6) { outline-color: #9b59b6; left: 25%; bottom: 0px; }
input[type="radio"]:nth-of-type(7) { outline-color: #f1c40f; left: 50%; bottom: 0px; }
input[type="radio"]:nth-of-type(8) { outline-color: #e67e22; left: 75%; bottom: 0px; }
input[type="radio"]:checked+ div { transform: translateX(0%); transition: transform 0.4s ease 0.4s; }
</style>
</head>
<body>
<input type="radio" name="name" checked="checked"/>
<div></div>
<input type="radio" name="name"/>
<div></div>
<input type="radio" name="name"/>
<div></div>
<input type="radio" name="name"/>
<div></div>
<input type="radio" name="name"/>
<div></div>
<input type="radio" name="name"/>
<div></div>
<input type="radio" name="name"/>
<div></div>
<input type="radio" name="name"/>
<div></div>
</body>
</html>
Run code
Cut to clipboard
文章:常用html、demo代码 发表时间:2016-10-08, 09:35:10
#2113
作者:广西南宁市
CSS3实现自定义Checkbox和Radiobox
我们知道浏览器自带的Checkbox复选框不怎么美观(这或许是我们看习惯了的缘故),而且复选框在不同的浏览器上显示的样式又有很大的差异,由于目前越来越多的人开始接受支持CSS3的现代浏览器,所以今天就简单的用一些CSS3代码来自定义Checkbox的显示方式,个人觉得比浏览器自带的Checkbox美观不少。
效果图如下

下面来分析一下源代码,原理很简单,先把页面上<input type="checkbox" />的display设置为none,从而把它隐藏掉,然后利用CSS3代码来绘制与checkbox邻近的label元素:
HTML代码:
CSS3代码:
下面的CSS代码可以让checkbox选中后出现阴影的效果,主要利用了box-shadow属性:
radiobox的实现也是同样的原理
我们知道浏览器自带的Checkbox复选框不怎么美观(这或许是我们看习惯了的缘故),而且复选框在不同的浏览器上显示的样式又有很大的差异,由于目前越来越多的人开始接受支持CSS3的现代浏览器,所以今天就简单的用一些CSS3代码来自定义Checkbox的显示方式,个人觉得比浏览器自带的Checkbox美观不少。
效果图如下
下面来分析一下源代码,原理很简单,先把页面上<input type="checkbox" />的display设置为none,从而把它隐藏掉,然后利用CSS3代码来绘制与checkbox邻近的label元素:
HTML代码:
<input type="checkbox" id="checkbox-1-1" class="regular-checkbox" /><label for="checkbox-1-1"></label>
<input type="checkbox" id="checkbox-1-2" class="regular-checkbox" /><label for="checkbox-1-2"></label>
<input type="checkbox" id="checkbox-1-3" class="regular-checkbox" /><label for="checkbox-1-3"></label>
<input type="checkbox" id="checkbox-1-4" class="regular-checkbox" /><label for="checkbox-1-4"></label>
Run code
Cut to clipboard
CSS3代码:
.regular-checkbox + label {
background-color: #fafafa;
border: 1px solid #cacece;
box-shadow: 0 1px 2px rgba(0,0,0,0.05), inset 0px -15px 10px -12px rgba(0,0,0,0.05);
padding: 9px;
border-radius: 3px;
display: inline-block;
position: relative;
}
Run code
Cut to clipboard
下面的CSS代码可以让checkbox选中后出现阴影的效果,主要利用了box-shadow属性:
.regular-checkbox + label:active, .regular-checkbox:checked + label:active {
box-shadow: 0 1px 2px rgba(0,0,0,0.05), inset 0px 1px 3px rgba(0,0,0,0.1);
}
Run code
Cut to clipboard
radiobox的实现也是同样的原理
文章:常用html、demo代码 发表时间:2016-10-08, 09:33:37
#2114
作者:广西南宁市
网页设计前端页面制作的规范要求和注意事项
组合命名规则:
[元素类型]-[元素作用/内容] 如:搜索按钮: btn-search
登录表单:form-login
新闻列表:list-news
涉及到交互行为的元素命名:
凡涉及交互行为的元素通常会有正常、悬停、点击和已浏览等不同样式,命名可参考以下规则:
鼠标悬停::hover 点击:click 已浏览:visited
如:搜索按钮: btn-search、btn-search-hover、btn-search-visited
用户体验方面需要注意的:
1). 每个连接,按钮要做上鼠标hover时的一个变化效果。如果hover时是换一张背景图片,请把这两张图片整合在一张图片中,以防止在hover时,页面还在download变化的那张图片,这样会出现那个按钮无图的间隔;
2). INPUT有个label,可以让用户在点击字时,光标自动跳入相应input中;
组合命名规则:
[元素类型]-[元素作用/内容] 如:搜索按钮: btn-search
登录表单:form-login
新闻列表:list-news
涉及到交互行为的元素命名:
凡涉及交互行为的元素通常会有正常、悬停、点击和已浏览等不同样式,命名可参考以下规则:
鼠标悬停::hover 点击:click 已浏览:visited
如:搜索按钮: btn-search、btn-search-hover、btn-search-visited
用户体验方面需要注意的:
1). 每个连接,按钮要做上鼠标hover时的一个变化效果。如果hover时是换一张背景图片,请把这两张图片整合在一张图片中,以防止在hover时,页面还在download变化的那张图片,这样会出现那个按钮无图的间隔;
2). INPUT有个label,可以让用户在点击字时,光标自动跳入相应input中;
文章:常用html、demo代码 发表时间:2016-10-08, 09:24:02
#2116
作者:中国
曾志伟去姚明家,因为姚明家特制的门,门镜高,敲了好几次门都没有人开,以为姚明不在家,就走了。
第二天他看到姚明无精打采的,就问他昨晚干嘛去了。
姚明神秘的说:昨晚我家好像闹鬼了,一直有人敲门,可是从猫眼又看不见人,吓得我一整夜没睡。
误解一般都是因高度不同造成的。 所以,以后再被人误解就别再闹心了,因为高度不同,角度不一样,今天你对太多事情不理解,是因为你还没有站到对方的位置。
第二天他看到姚明无精打采的,就问他昨晚干嘛去了。
姚明神秘的说:昨晚我家好像闹鬼了,一直有人敲门,可是从猫眼又看不见人,吓得我一整夜没睡。
误解一般都是因高度不同造成的。 所以,以后再被人误解就别再闹心了,因为高度不同,角度不一样,今天你对太多事情不理解,是因为你还没有站到对方的位置。
文章:他不是脾气暴躁,只是不能被打扰 发表时间:2016-10-04, 01:41:38
#2117
作者:中国
公司会上,总经理在黑板上做了这四道题: 2+2=4;4+4=8;8+8=16;9+9=20。 员工们纷纷说道:“你算错了一道。” 总经理转过身来,慢慢地说道:“是的,大家看得很清楚,这道题是算错了。可是前面我算对了三道题,为什么没有人夸奖我,而只是看到我算错的一道呢!”做人也是这样,你对他十次好,也许他忘记了,一次不顺心,也许会抹杀所有。这就是100-1=0人性的道理。
文章:他不是脾气暴躁,只是不能被打扰 发表时间:2016-10-04, 00:05:47
#2118
作者:广西南宁市
程序的优化问题
有这样一个问题,有a,b,c,d四个字母,每当刷新页面时会以随机的顺序出现,比如a,d,b,c和b,d,c,a。
我当时的解决方案为:
不过这样写有着很明显的弊端,那就是下次如果想换一些字母进行输出时,必须将程序进行一次大的更改才能继续进行应用,这样做不利于重复使用
下面这种方法就很好的解决了这个问题,当想再次调用时,只需将数组arr中的值进行更改就可以了
在我看来,真正好的函数必须做到可重复使用,模块化,和具有良好的封装性。
找了个最精简的写法
有这样一个问题,有a,b,c,d四个字母,每当刷新页面时会以随机的顺序出现,比如a,d,b,c和b,d,c,a。
我当时的解决方案为:
<script type="text/javascript">
var str1;
var str=[];
var flag1=true;
var flag2=true;
var flag3=true;
var flag4=true;
do{
var num=parseInt(Math.round(Math.random()*(4-1))+1);
if(num==1&&flag1){
str[str.length]="a";
flag1=false;
}else if(num==2&&flag2){
str[str.length]="b";
flag2=false;
}else if(num==3&&flag3){
str[str.length]="c";
flag3=false;
}else if(num==4&&flag4){
str[str.length]="d";
flag4=false;
}
}while(flag1||flag2||flag3||flag4)
str1=str[0]+str[1]+str[2]+str[3];
document.write(str1);
</script>
Run code
Cut to clipboard
不过这样写有着很明显的弊端,那就是下次如果想换一些字母进行输出时,必须将程序进行一次大的更改才能继续进行应用,这样做不利于重复使用
下面这种方法就很好的解决了这个问题,当想再次调用时,只需将数组arr中的值进行更改就可以了
<script type="text/javascript">
var arr=["a","b","c","d"];
function changestr(){
var newArry=[];
var temp=[];//新创建的两个数组
for(var p in arr){
temp[p]=arr[p];//将原本数组中的值复制给重新定义的数组
}
for(var i=0;i<arr.length;i++){
var random=Math.round(Math.random()*(temp.length-1));//产生0~temp数组长度-1的值
newArry[i]=temp[random];//将temp数组中随机出来的数组值赋给新数组
temp.splice(random,1);//删除赋给新数组的值,temp数组的长度减一,直到temp中没有值为止
}
return newArry
}
document.write(Arry=changestr());
</script>
Run code
Cut to clipboard
在我看来,真正好的函数必须做到可重复使用,模块化,和具有良好的封装性。
找了个最精简的写法
function randomsort(a, b) {
return Math.random()>.5 ? -1 : 1;//用Math.random()函数生成0~1之间的随机数与0.5比较,返回-1或1
}
var arr = ["a","b","c","d"];
arr.sort(randomsort);
document.write(arr);
Run code
Cut to clipboard
文章:Google方程式 WWWDOT – GOOGLE = DOTCOM 发表时间:2016-09-30, 18:43:01
#2119
作者:广西南宁市
盒子不同模式下的宽高判断
曾经遇到过这样的问题,设定一个div,当给div设置padding的时候,发现整个div的宽高都发生了变化,这里就产生了一个疑惑,一个盒子的总体宽高到底是怎么去判断的呢?
经过查询得知,盒子宽高的判定模式一共有两种,分别为标准模式和怪异模式。
一般情况下个盒子的宽高在一般情况下等于内容的宽高+边框的宽高+内边距的宽高+外边距的宽高
这就是标准模式下的盒子宽高判定
但在某些时候(ie6,7,8 下DOCTYPE缺失)盒子的宽高等于设定的宽高+外边距的宽高,这里的设定的宽高就等于内容的宽高+内边距的宽高+边框的宽高
这就是怪异模式下的盒子宽高判定
我们可以通过使用box-sizing属性来决定使用哪一种模式,
通过怪异模式我们可以在不改变盒子整体宽高的情况下给其设定padding。
曾经遇到过这样的问题,设定一个div,当给div设置padding的时候,发现整个div的宽高都发生了变化,这里就产生了一个疑惑,一个盒子的总体宽高到底是怎么去判断的呢?
经过查询得知,盒子宽高的判定模式一共有两种,分别为标准模式和怪异模式。
一般情况下个盒子的宽高在一般情况下等于内容的宽高+边框的宽高+内边距的宽高+外边距的宽高
这就是标准模式下的盒子宽高判定
但在某些时候(ie6,7,8 下DOCTYPE缺失)盒子的宽高等于设定的宽高+外边距的宽高,这里的设定的宽高就等于内容的宽高+内边距的宽高+边框的宽高
这就是怪异模式下的盒子宽高判定
我们可以通过使用box-sizing属性来决定使用哪一种模式,
content-box : 将采用标准模式解析计算 ,
border-box: 将采用怪异模式解析计算
Run code
Cut to clipboard
通过怪异模式我们可以在不改变盒子整体宽高的情况下给其设定padding。
文章:常用html、demo代码 发表时间:2016-09-30, 18:40:53
#2120
作者:广西南宁市
CSS3实现让人有点击欲望的按钮
主要通过css3的动画效果来实现
总结两点重要属性就是:
(1)css3的animation属性,要注意几大内核的兼容
然后就是对myfirst动画名称的具体定义
掌握这两个就可以做出很多非常具有点击欲的按钮
主要通过css3的动画效果来实现
总结两点重要属性就是:
(1)css3的animation属性,要注意几大内核的兼容
animation:myfirst 1s infinite;
-moz-animation:myfirst 1s infinite; /* Firefox */
-webkit-animation:myfirst 1s infinite; /* Safari and Chrome */
-o-animation:myfirst 1s infinite ease-in-out; /* Opera */
Run code
Cut to clipboard
然后就是对myfirst动画名称的具体定义
@keyframes myfirst{from {font-size:15px;}to {font-size:20px;}}
@-moz-keyframes myfirst{from {font-size:15px;}to {font-size:20px;}} /* Firefox */
@-webkit-keyframes myfirst {from {font-size:15px;}to {font-size:20px;}} /* Safari and Chrome */
@-o-keyframes myfirst {from {font-size:15px;}to {font-size:20px;}} /* Opera */
Run code
Cut to clipboard
掌握这两个就可以做出很多非常具有点击欲的按钮
文章:常用html、demo代码 发表时间:2016-09-30, 17:44:30
#2122
作者:广西南宁市
完美 全兼容 解决 文字两端对齐 justify 中文姓名对齐
,text-justify之类的却只有IE支持,就不要考虑了。
justify我的理解,使元素内部的子元素两端对齐,子元素当然只能是inline或inline-block。但justify对最后一行是无能为力的。我们在对齐姓名时,因为只有一行,当作最后一行,所以不会两端对齐的效果。
姓名对齐我们比较常用的是来添充两个字,三个字的姓名,使包括四字的姓名都能对齐。例如:

所以就想到了用text-align:justify;但怎么解决单行不能两端对齐呢,思路就是:
让浏览器认为这不是最后一行就行了
在元素里面加一个会换行的空的子元素比如:
例子:html结构
scss
效果


原文
text-align:justify; 所有浏览器都支持
Run code
Cut to clipboard
justify我的理解,使元素内部的子元素两端对齐,子元素当然只能是inline或inline-block。但justify对最后一行是无能为力的。我们在对齐姓名时,因为只有一行,当作最后一行,所以不会两端对齐的效果。
姓名对齐我们比较常用的是
(半个中文空格), (一个中文空格)
Run code
Cut to clipboard
所以就想到了用text-align:justify;但怎么解决单行不能两端对齐呢,思路就是:
让浏览器认为这不是最后一行就行了
在元素里面加一个会换行的空的子元素比如:
<i style="display:inline-block;width:100%;height:0;"></i>
Run code
Cut to clipboard
例子:html结构
<ul class="arter">
<li><span>作品名称<i></i></span>: 宝贝儿</li>
<li><span>作品类型<i></i></span>: 油画</li>
<li><span>艺术家<i></i></span>: 张玉瀛</li>
<li><span>风格<i></i></span>: 超现实</li>
<li><span>材质<i></i></span>: 布面油画</li>
<li><span>题材<i></i></span>: 人物</li>
<li><span>创作时间<i></i></span>: 2011</li>
<li><span>所在位置<i></i></span>: 华东</li>
<li><span>尺寸<i></i></span>: 78x78cm</li>
</ul>
Run code
Cut to clipboard
scss
li{font-size:14px;line-height:24px;color:#4a4a4a;
span{height:24px;line-height:24px;width:65px;text-align:justify;display:inline-block;overflow:hidden;vertical-align:top;
i{display:inline-block;width:100%;height:0;}
}
}
Run code
Cut to clipboard
效果
几点注意事项:
1)span要设置为inline-block;才能和后面的字同行显示,同时设置width才会使<i>换行;
2)必须要设置span元素的height,和overflow:hidden否则<i>还是会占高度;
3)vertical-align:top;可以使,li内的span和后面的字,高度对齐,否则会变成
Run code
Cut to clipboard
原文
文章:常用html、demo代码 发表时间:2016-09-29, 16:53:01
#2123
作者:广西南宁市
尾递归~~有点小意思!!!
尾递归很有意思~~~
拿快排说事的话,本来按照通俗易懂的理解,就是两次调用本身来进行左右排序。
按照尾递归的话得,可以省下一半的递归空间,直接拿一次的处理结果的low 或者high当参数传入下一次的调用。整个过程相比于同时进行两次本身的递归调用,这样只使用一次本身递归调用。
尾递归就是用迭代来代替递归全部过程。
递归调用会消耗大量的栈空间,每一次递归调用函数都会新开一个栈空间进行运行,同时要将上一次函数计算结果保存起来。所谓的保存现场,这样会消耗大量的栈空间。于是用迭代、用尾递归代替全递归调用就是一个很好的选择。
最常用距离都是斐波拉契数列,
教科书就是用这个进行举例递归调用的。
这样就是一个递归调用的最经典的例子,不过在计算的过程中,每次调用的时候都得将上次计算的过程进行现场保存。所以当n很大的时候,这个n会占用很大的内存。
所以改用迭代的过程,或者尾递归的过程,即把每次的计算的结果存储起来同时传递给下一次函数得调用。
在快排改进排序中也是同样利用while迭代,来替代另外一次的递归调用。
突然发现一个问题,我原来混淆了斐波拉契数列。把n的阶乘当成斐波拉契数列数列啦。斐波拉契数列定义应该是
代码同理:
其实所谓尾递归,还是递归调用。但是内部就是用的所谓的迭代。其实可以用while循环来改写。将else部分替换成while的话,可能会更显而易见。
尾递归很有意思~~~
拿快排说事的话,本来按照通俗易懂的理解,就是两次调用本身来进行左右排序。
按照尾递归的话得,可以省下一半的递归空间,直接拿一次的处理结果的low 或者high当参数传入下一次的调用。整个过程相比于同时进行两次本身的递归调用,这样只使用一次本身递归调用。
尾递归就是用迭代来代替递归全部过程。
递归调用会消耗大量的栈空间,每一次递归调用函数都会新开一个栈空间进行运行,同时要将上一次函数计算结果保存起来。所谓的保存现场,这样会消耗大量的栈空间。于是用迭代、用尾递归代替全递归调用就是一个很好的选择。
最常用距离都是斐波拉契数列,
Feb(n) = n*(n-1)*(n-2)….2*1;
Run code
Cut to clipboard
教科书就是用这个进行举例递归调用的。
function Feb($n)
{
if($n<=2)
{
return $n;
}
$res = $n*Feb($n-1);
return $res;
}
Run code
Cut to clipboard
这样就是一个递归调用的最经典的例子,不过在计算的过程中,每次调用的时候都得将上次计算的过程进行现场保存。所以当n很大的时候,这个n会占用很大的内存。
所以改用迭代的过程,或者尾递归的过程,即把每次的计算的结果存储起来同时传递给下一次函数得调用。
function Febs($n,$sum)
{
if($n<=2)
{
return $sum;
}
else
{
return Febs($n-1,$sum*$n);
}
}
Run code
Cut to clipboard
在快排改进排序中也是同样利用while迭代,来替代另外一次的递归调用。
function Partion(&$arr,$low,$high)
{
if($low >= $high)
{
return;
}
//标记位
$povion = $arr[$low];
while ($low <$high )
{
while ($low < $high && $arr[$high] <= $povion)
{
$high--;
}
$arr[$low] = $arr[$high];
while ($low < $high && $arr[$low] > $povion)
{
$low++;
}
$arr[$high] = $arr[$low];
}
//循环完了之后将标记位回复到i=j相交的位置
$arr[$low] = $povion;
return $low;
}
function Qsort(&$arr,$low,$high)
{
if($low >= $high )
{
return;
}
while($low < $high)
{
$povision = Partion($arr,$low,$high);
Qsort($arr,$low,$povision-1);
$low = $povision+1;
}
//正常的递归调用快排算法如下
// $povision = Partion($arr,$low,$high);
// Qsort($arr,$low,$povision);
// Qsort($arr,$povision+1,$high);
}
Run code
Cut to clipboard
突然发现一个问题,我原来混淆了斐波拉契数列。把n的阶乘当成斐波拉契数列数列啦。斐波拉契数列定义应该是
Feb(n) = Feb(n-1)+Feb(n-2);
Run code
Cut to clipboard
代码同理:
function Feb($n)
{
if($n<=2)
{
return 1;
}
$res = Feb($n-1)+Feb($n-2);
return $res;
}
$res = Feb(20);
print_r($res);
function Febs($n,$sum1,$sum2)
{
if($n<2)
{
return $sum1;
}
else
{
return Febs($n-1,$sum2,$sum1+$sum2);
}
}
print_r(Febs(20,1,1));
Run code
Cut to clipboard
其实所谓尾递归,还是递归调用。但是内部就是用的所谓的迭代。其实可以用while循环来改写。将else部分替换成while的话,可能会更显而易见。
文章:Google方程式 WWWDOT – GOOGLE = DOTCOM 发表时间:2016-09-29, 16:47:36
#2124
作者:广西南宁市
缓存在网站开发中的重要性
通过计算斐波那契数列明白缓存在网站开发中的重要性
1 、首先测试一下没有使用数据缓存来计算斐波那契数列。
2、下面我们看看使用数据缓存来计算斐波那契数列。
通过上面两次对比,瞬间觉得数据缓存的重要性,由331160281次下降到79次。感兴趣的屌丝可以测试一下fib(50);的运行次数,不使用数据缓存我测试了,我的浏览器崩溃了,使用数据缓存运行才99次。
通过计算斐波那契数列明白缓存在网站开发中的重要性
1 、首先测试一下没有使用数据缓存来计算斐波那契数列。
var count = 0;
function fib(n) {
count++;
if(n === 0 || n === 1) {
return 1;
}
return fib(n - 1) + fib(n - 2);
}
fib(40);
console.log(count);//count是函数fib运算次数,当fib(40)时候运行次数高达:331160281次,感兴趣的可以检测一下。
Run code
Cut to clipboard
2、下面我们看看使用数据缓存来计算斐波那契数列。
// 缓存是怎么使用的?
// 一般的缓存结构就是:键值对(对象 或者 数组)
// var obj = {};
// var arr = [];
// 使用缓存的方式:
// 1 先去缓存中查找有没有键对应的数据
// 2 如果有,就直接拿过来使用
// 3 如果没有,就计算或者是查询到,然后,要放到缓存中!
// 4 以后,就通过缓存来去数据
// 简化的步骤:先去缓存中查询有没有,如果没有就计算,并将结果放到缓存中
// 问题:缓存放到什么位置去??
// 如果是全局变量,此时,任何人都能修改全局变量的内容
// 那就造成:数据不准确
// var obj = {};
// 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89....
var count = 0;
var fib = (function() {
// 使用闭包,将缓存放到闭包中去,
// 此时,就对这个缓存起到了保护的作用
// var cache = {};
var cache = [];
// 这个函数使用来计算:斐波那契数列
return function(n) {
count++;
// 1 先去缓存中查找有没有该键对象的值
if(cache[n] !== undefined) {
// 2 如果有,就直接返回当前的值
return cache[n];
}
// 3 如果没有,就计算,然后要添加到缓存中去
if(n === 0 || n === 1) {
// return 1;
cache[n] = 1;
return cache[n];
}
var temp = arguments.callee(n - 1) + arguments.callee(n - 2);
// 放到缓存中去
cache[n] = temp;
return cache[n];
};
})();
fib(40);
console.log(count);// 计算次数为:79次。
Run code
Cut to clipboard
通过上面两次对比,瞬间觉得数据缓存的重要性,由331160281次下降到79次。感兴趣的屌丝可以测试一下fib(50);的运行次数,不使用数据缓存我测试了,我的浏览器崩溃了,使用数据缓存运行才99次。
文章:Google方程式 WWWDOT – GOOGLE = DOTCOM 发表时间:2016-09-29, 16:35:52
#2126
作者:广西南宁市
延迟JavaScript的加载
浏览器在执行JavaScript代码时会停止处理页面,当页面中有很多JavaScript文件或代码要加载时,将导致严重的延迟。尽管可以使用defer、异步或将JavaScript代码放到页面底部来延迟JavaScript的加载,但这些都不是一个好的解决方案。
下面是Google的建议。
这段代码的意思是等待页面加载完成后,然后再加载外部的“defer.js”文件。下面是测试结果。

浏览器在执行JavaScript代码时会停止处理页面,当页面中有很多JavaScript文件或代码要加载时,将导致严重的延迟。尽管可以使用defer、异步或将JavaScript代码放到页面底部来延迟JavaScript的加载,但这些都不是一个好的解决方案。
下面是Google的建议。
<script type="text/javascript">
function downloadJSAtOnload() {
var element = document.createElement("script");
element.src = "defer.js";
document.body.appendChild(element);
}
if (window.addEventListener)
window.addEventListener("load", downloadJSAtOnload, false);
else if (window.attachEvent)
window.attachEvent("onload", downloadJSAtOnload);
else window.onload = downloadJSAtOnload;
</script>
Run code
Cut to clipboard
这段代码的意思是等待页面加载完成后,然后再加载外部的“defer.js”文件。下面是测试结果。
文章:常用html、demo代码 发表时间:2016-09-29, 12:15:28
#2127
作者:广西南宁市
人太容易被惯性 推动着前进,而思维惯性是弊端最大的一个东西~~~要勇于打破一些禁锢自己的东西,这需要一个坚持的过程
文章:成功的故事只能倒叙着讲 发表时间:2016-09-28, 14:56:59
#2128
作者:广西南宁市
setInterval(function() {
if(Date.now() >= new Date("2016-09-12 15:59:00")) {
$("#seckillQuantity").val(1);//1盒
$(".buyButtons.J_buyButtons").click();//抢购按钮
var value = $(".answerList").children().eq(0).html(); //验证码取值
$('#randomAnswer').val(value);//验证码填值
$('.answer-button').children().eq(0).click();//提交验证码
}
}, 10)
Run code
Cut to clipboard
文章:《阿里盛世下的蝼蚁》 发表时间:2016-09-27, 11:42:16
var num = 74; for(one = 0; one <= num; one++){ for(five = 0; five <= num/5 ; five++){ for(ten = 0; ten <= num/5 ; ten++){ for(twenty = 0; twenty <= num/20; twenty++){ if(one + five*5 + ten*10 + twenty*20 == num){ console.log(one + "个1," + five + "个5," + ten +"个10," + twenty + "个20组成。"); } } } } }