标签 Javascript 下的所有文章

ES6学习笔记 – 字符串和数值扩展

记录一下几个简单的ES6的字符串和数值方法

字符串扩展

字符串查找(当前版本Chrome已支持)

let a = "hello world!";
a.startsWith("hello"); //true
a.endsWith("!"); //true
a.includes("w"); //true
 
//第二个参数表示搜索位置索引
a.startsWith("ello" , 1); //true
a.endsWith("hello" , 5); //true
a.includes("hello" , 5); //false

查看详细 »

ES6学习笔记 – let、const和块及作用域

最近粗略看了一下ES6的一些特性,如果运用成熟,写JS的感觉将比ES5要愉悦很多。随着微信小程序开发量的增加,自己也觉得是时候拿起ES6了。买了一本阮一峰的《ES6标准入门》,从第二章开始慢慢看了起来。在自己的博客上也整理一些笔记,记录学习轨迹。

let 和 const 命令声明的变量,有严格的块级作用域限制,当前{}内声明的变量,在当前{}外无法使用;同一作用域下在变量声明之前,也不能使用;否则都会报错。另外,不允许重复声明同一变量。

for(let i=0 ; i<3; i++){
  let i="a";
  console.log(i); //输出三次a;在()内声明的i和在{}内声明的i并不在同一作用域内
}
console.log(i); //报错

查看详细 »

正则表达式学习笔记

做项目的时候,正则表达式其实用得很少,而且大部分用得到的正则表达式都可以通过搜索引擎找到。因此这么多年来虽然已经多次研读正则表达式的文档,但偶尔要自己写的时候还是会脑子卡壳,求助谷歌…
好吧,再好好的理解一下,做个笔记,争取减少求助搜索引擎的次数。本文并非系统整理正则表达式的概念,而是加强巩固自己淡忘的一些概念和知识点。

正则表达式通过构造函数使用方法

var str = "He is a boy. She is not a boy."
var reg = new RegExp("\\bis\\b");
str.replace(reg, "IS");
//"He IS a boy. She is not a boy."
var reg = new RegExp("\\bis\\b" , 'g');
str.replace(reg, "IS");
//"He IS a boy. She IS not a boy."
 
//另一种写法:正则表达式前后用/包含,g参数加在最后
str.replace(/\bis\b/g, "IS");

查看详细 »

解决IE7下页面元素因浏览器渲染(重绘)Bug而不显示的问题

稍微有点经验的前端应该知道IE7-有一个经典的渲染问题,表现在对display为inline-block的元素的不友好上。我们也知道只要重新给这个元素单独宣布一条display:inline,就能解决问题。但今天我要说的不是这个,最近新完成的一个网站,在IE7下浏览,就有包括导航和热图这样的大块元素没有正常显示:
iexuanran

经过检查,发现这些没有正常显示的元素,都有一个共同的CSS属性- position:relative,导致这些元素在IE7中没有被正常的渲染到,就没有显示出来。百度了一下,这个问题归类为-IE重绘问题。当然并非所有position为relative的元素都不能在IE7中正常显示,实际情况要比我这里所指的复杂的多。由于布局的硬性需要(比如滚动图片的移动效果),使我没有办法不用relative属性,所以要解决在IE7中的渲染问题,就必须另外想办法。 查看详细 »

浅谈响应式瀑布流的实现方式

瀑布流主要应用在图片展示页面上。如果有一大批图片需要展示,原始图片尺寸不一致,又希望每张图片都能不剪裁,完整显示,那么就要给图片规定一个宽度,解放它们的高度。利用网页高度不限这个特性,充分利用页面的空间,尽可能的展示多的图片。瀑布流的实现方法挺多,但能做到响应式列数变化,自由布局的并不多。这次自己开发了一个作品集页面,正好研究一下响应式瀑布流的实现方法。

响应式瀑布流布局的思路

响应式瀑布流需要解决的问题:

1. 响应式多列:960px宽以上呈4列,750-960呈3列,400-750呈2列,400宽以下变成1列;
2. 由于需要做响应式,那么每块的宽度就不固定,导致高度更加不可能固定。后端输出的时候,图片(块)的高度本来就是未知的,要用JS实时取到它们的高度,以便调整布局。
3. 异步加载:页面拖到最低端的时候加载更多,这个很常见。 查看详细 »

谷歌(Google)被墙,解决地图和字体无法显示的问题

首先,本文以及本站所有文章都是技术探讨文章,不鼓励任何人去fan qiang以及做任何违法的事情。接下来是正文:

谷歌基本上是被和谐透了,谷歌地图API自然也打不开了,于是公司网站上那些谷歌地图都变成空白了…总不能让访客都自己fan qiang吧。纠结了一阵子才知道原来谷歌地图的服务并没有完全被屏蔽,只是我们以前访问的域名maps.google.com访问不了了。
这个域名的谷歌地图还是能正常访问的:http://ditu.google.cn
那么把原来的JS引用地址maps.googleapis.com替换成ditu.google.cn就解决了。

1
<script>http://ditu.google.cn/maps/api/js?v=3&key=xxxxxxx&sensor=false</script>

接下来是谷歌字体问题, 查看详细 »

原生Javascript拖放程序

自己造轮子写个原生拖放,要做到简单调用,考虑拖放对象所在的环境,还要兼容老IE,还是挺锻炼人的。
主要碰到几个问题:

  1. 关于冒泡和阻止默认事件,以前的理解都很粗略,自己写的时候才知要细分。
    一是要阻止事件传递,即事件冒泡,老IE里是ev.cancelBubble=true,其他浏览器是ev.stopPropagation(),要在onmousedown的时候就定义好;
    然后是阻止默认事件,主要是为了防止图片无法拖动的问题,要在onmousemove的时候,老IE里是ev.returnValue=false; 其他浏览器ev.preventDefault()
  2. 拖动过程中鼠标移出物件,就要把事件方法在document上复制一遍:document.onmousemove=_self.onmousemove; 并且考虑到拖放结束的时候鼠标可能是在任意位置,那就干脆把onmouseup方法写在document上
  3. 单纯的拖放物件其实没什么用,实际应用的时候肯定会给拖放增加范围,比如自制的滚动条,幻灯效果等。所以给拖放对象的父级元素作边界。于是又重温了各种位置取值的兼容问题,getBoundingClientRect()是一个很有用的函数,不过在老IE里面取不到宽高,所以要自己计算一下。

查看详细 »

Google Map API3地图页面开发笔记

今年年初Google Map就向所有采用API2开发的网站发了通知函,说5月份会停止API2,今后所有的Gmap项目都要基于API3开发,并且建议把API2项目都升级到API3。我公司网站上有一个Gmap的页面,通过读取一个feed实现所有酒店位置的显示,这是页面地址 – http://www.vhr.com/hotels.aspx。 由于太忙,一直都没时间去给这个地图做升级,等到11月,突然发现这个基于API2开发的地图不能用了,而且由于Google关闭了引用的JS,导致连调试都不能了,不得不去研究API3的文档,重新开发了。API2到API3的升级不是简单的几个函数和方法替换的事儿,API3的语法比起API2来显得更加的面向对象,还是整理思路重做吧… 查看详细 »

原生Javascript实现页面平滑滚动跳转

看见很多Blog的右下角有一个平滑滚动到页面顶部的箭头,觉得挺实用。我的WP主题没有自带这个功能,网上找到的现成的又都是基于jQuery的,自己的网站我还不考虑用任何JS框架,自己写一个好了…既然是自己写那就考虑把功能写得完整一些,不仅要可以平滑滚动到页面顶端,而且要可以平滑滚动到页面任何元素指定的位置,实现锚点的功能。

先把那个箭头按钮给造出来,一个黑方块里面套一个三角形和正方形,一共3个元素: 查看详细 »

两个IE6/7/8下的原生兼容问题

最近碰到的两个原生JS在IE6/7/8里的兼容问题。
1,indexOf和slice等字符串方法:
在用这两个方法进行数组内部元素操作的时候,在IE9+以上没有碰到问题,但在IE678中经常给我脸色看,报错类似“…is null or not an object”。及其笼统的报错。用toString方法把对象转换成字符串,这一行本身也会报错。
解决方法:直接在对象后面+”,强制转换成字符串就行了 查看详细 »