`
axl234
  • 浏览: 268958 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

-前端冷知识集锦

 
阅读更多

前端已经被玩儿坏了!像console.log()可以向控制台输出图片等炫酷的玩意已经不是什么新闻了,像用||操作符给变量赋默认值也是人尽皆知的旧闻了,今天看到Quora上一个帖子,瞬间又GET了好多前端技能,一些属于技巧,一些则是闻所未闻的冷知识,一时间还消化不过来。现分类整理出来分享给大家,也补充了一些平时的积累和扩展了一些内容。

HTML篇浏览器地址栏运行JavaScript代码

这个很多人应该还是知道的,在浏览器地址栏可以直接运行JavaScript代码,做法是以javascript:开头后跟要执行的语句。比如:

javascript:alert('hello from address bar :)');

将以上代码贴到浏览器地址栏回车后alert正常执行,一个弹窗神现。

需要注意的是如果是通过copy paste代码到浏览器地址栏的话,IE及Chrome会自动去掉代码开头的javascript:,所以需要手动添加起来才能正确执行,而Firefox中虽然不会自动去掉,但它根本就不支持在地址栏运行JS代码,sigh~

这一技术在我的另一篇博文《让Chrome 接管邮件连接,收发邮件更方便了》中有使用到,利用在浏览器地址栏中执行JavaScript代码将Gmail设置为系统的邮件接管程序。

浏览器地址栏运行HTML代码

如果说上面那条小秘密知道的人还算多的话,这条秘笈知道的人就要少一些了,在非IE内核的浏览器地址栏可以直接运行HTML代码!

比如在地址栏输入以下代码然后回车运行,会出现指定的页面内容。

data:text/html,<h1>Hello, world!</h1>

 

 

你造么,可以把浏览器当编辑器

还是浏览器地址栏上做文章,将以下代码贴到地址栏运行后浏览器变成了一个原始而简单的编辑器,与Windows自带的notepad一样,吼吼。

data:text/html, <html contenteditable>

 

 

归根结底多亏了HTML5中新加的contenteditable属性,当元素指定了该属性后,元素的内容成为可编辑状态。

推而广之,将以下代码放到console执行后,整个页面将变得可编辑,随意践踏吧~

document.body.contentEditable='true';

 

 

 

利用a标签自动解析URL

很多时候我们有从一个URL中提取域名,查询关键字,变量参数值等的需要,而万万没想到可以让浏览器方便地帮我们完成这一任务而不用我们写正则去抓取。方法就在JS代码里先创建一个a标签然后将需要解析的URL赋值给ahref属性,然后就得到了一切我们想要的了。

var a = document.createElement('a');
 a.href = 'http://www.cnblogs.com/wayou/p/';
 console.log(a.host);

 

利用这一原理,稍微扩展一下,就得到了一个更加健壮的解析URL各部分的通用方法了。下面代码来自James的博客

function parseURL(url) {
    var a =  document.createElement('a');
    a.href = url;
    return {
        source: url,
        protocol: a.protocol.replace(':',''),
        host: a.hostname,
        port: a.port,
        query: a.search,
        params: (function(){
            var ret = {},
                seg = a.search.replace(/^\?/,'').split('&'),
                len = seg.length, i = 0, s;
            for (;i<len;i++) {
                if (!seg[i]) { continue; }
                s = seg[i].split('=');
                ret[s[0]] = s[1];
            }
            return ret;
        })(),
        file: (a.pathname.match(/\/([^\/?#]+)$/i) || [,''])[1],
        hash: a.hash.replace('#',''),
        path: a.pathname.replace(/^([^\/])/,'/$1'),
        relative: (a.href.match(/tps?:\/\/[^\/]+(.+)/) || [,''])[1],
        segments: a.pathname.replace(/^\//,'').split('/')
    };}

页面拥有ID的元素会创建全局变量

在一张HTML页面中,所有设置了ID属性的元素会在JavaScript的执行环境中创建对应的全局变量,这意味着document.getElementById像人的阑尾一样显得多余了。但实际项目中最好老老实实该怎么写就怎么写,毕竟常规代码出乱子的机会要小得多。

<div id="sample"></div><script type="text/javascript">
        console.log(sample);</script>

 

加载CDN文件时,可以省掉HTTP标识

现在很流行的CDN即从专门的服务器加载一些通用的JS和CSS文件,出于安全考虑有的CDN服务器使用HTTPS方式连接,而有的是传统的HTTP,其实我们在使用时可以忽略掉这个,将它从URL中省去。

<script src="//domain.com/path/to/script.js"></script>

 这一点在之前一篇译文博客《jQuery编程最佳实践》中也有提到。

利用script标签保存任意信息

将script标签设置为type='text'然后可以在里面保存任意信息,之后可以在JavaScript代码中很方便地获取。

<script type="text" id="template">
	<h1>This won't display</h1></script>

 

var text = document.getElementById('template').innerHTML

CSS篇关于CSS的恶作剧

相信你看完以下代码后能够预料到会出现什么效果。

*{
    cursor: none!important;}

 

简单的文字模糊效果

以下两行简单的CSS3代码可达到将文字模糊化处理的目的,出来的效果有点像使用PS的滤镜,so cool!

p {
    color: transparent;
    text-shadow: #111 0 0 5px;}

 

 

 

垂直居中

有好多次博主都有这样的需求,垂直居中显示某个DIV,我们知道CSS中天然有水平居中的样式text-align:center。唯独这个垂直居中无解。

当然你可以将容器设置为display:table,然后将子元素也就是要垂直居中显示的元素设置为display:table-cell,然后加上vertical-align:middle来实现,但此种实现往往会因为display:table而破坏整体布局,那还不如直接用table标签了呢。

下面这个样式利用了translate来巧妙实现了垂直居中样式,需IE9+。

.center-vertical {
    position: relative;
    top: 50%;
    transform: translateY(-50%);}

相比而言,水平居中要简单得多,像上面提到的text-align:center,经常用到的技巧还有margin:0 auto。但对于margin大法也只在子元素宽度小于容器宽度时管用,当子元素宽度大于容器宽度时此法失效。

如法炮制,利用lefttransform同样可实现水平居中,不过意义不大,毕竟text-alignmargin差不多满足需求了。

.center-horizontal {
    position: relative;
    left: 50%;
    transform: translateX(-50%); }

 

多重边框

利用重复指定box-shadow来达到多个边框的效果

在线演示    

/*CSS Border with Box-Shadow Example*/div {
    box-shadow: 0 0 0 6px rgba(0, 0, 0, 0.2), 0 0 0 12px rgba(0, 0, 0, 0.2), 0 0 0 18px rgba(0, 0, 0, 0.2), 0 0 0 24px rgba(0, 0, 0, 0.2);
    height: 200px;
    margin: 50px auto;
    width: 400px}

 

 

实时编辑CSS

通过设置style标签的display:block样式可以让页面的style标签显示出来,并且加上contentEditable属性后可以让样式成为可编辑状态,更改后的样式效果也是实时更新呈现的。此技巧在IE下无效。拥有此技能者,逆天也!

<!DOCTYPE html><html>
    <body>
        <style style="display:block" contentEditable>
        	body { color: blue }
        </style>
    </body></html>

 

 

创建长宽比固定的元素

通过设置父级窗口的padding-bottom可以达到让容器保持一定的长度比的目的,这在响应式页面设计中比较有用,能够保持元素不变形。

<div style="width: 100%; position: relative; padding-bottom: 20%;">
    <div style="position: absolute; left: 0; top: 0; right: 0; bottom: 0;background-color:yellow;">
        this content will have a constant aspect ratio that varies based on the width.    </div></div>

 

CSS中也可以做简单运算

通过CSS中的calc方法可以进行一些简单的运算,从而达到动态指定元素样式的目的。

.container{
	background-position: calc(100% - 50px) calc(100% - 20px);}

 

JavaScript篇生成随机字符串

利用Math.randomtoString生成随机字符串,来自前一阵子看到的一篇博文。这里的技巧是利用了toString方法可以接收一个基数作为参数的原理,这个基数从2到36封顶。如果不指定,默认基数是10进制。略屌!    

function generateRandomAlphaNum(len) {
    var rdmString = "";
    for (; rdmString.length < len; rdmString += Math.random().toString(36).substr(2));
    return rdmString.substr(0, len);}

 

 

整数的操作

JavaScript中是没有整型概念的,但利用好位操作符可以轻松处理,同时获得效率上的提升。

|0~~是很好的一个例子,使用这两者可以将浮点转成整型且效率方面要比同类的parseInt,Math.round 要快。在处理像素及动画位移等效果的时候会很有用。性能比较见此

var foo = (12.4 / 4.13) | 0;//结果为3var bar = ~~(12.4 / 4.13);//结果为3

 顺便说句,!!将一个值方便快速转化为布尔值 !!window===true 。

 

重写原生浏览器方法以实现新功能

下载的代码通过重写浏览器的alert让它可以记录弹窗的次数。

(function() {
    var oldAlert = window.alert,
        count = 0;
    window.alert = function(a) {
        count++;
        oldAlert(a + "\n You've called alert " + count + " times now. Stop, it's evil!");
    };})();alert("Hello World");

 

关于console的恶作剧

关于重写原生方法,这里有个恶作剧大家可以拿去寻开心。Chrome的console.log是支持对文字添加样式的,甚至log图片都可以。于是可以重写掉默认的log方法,把将要log的文字应用到CSS的模糊效果,这样当有人试图调用console.log()的时候,出来的是模糊不清的文字。好冷,我表示没有笑。

是从这篇G+帖子的评论里看到的。使用之后的效果是再次调用log会输出字迹模糊不清的文字。

var _log = console.log;console.log = function() {
  _log.call(console, '%c' + [].slice.call(arguments).join(' '), 'color:transparent;text-shadow:0 0 2px rgba(0,0,0,.5);');};

 

不声明第三个变量的值交换

我们都知道交换两个变量值的常规做法,那就是声明一个中间变量来暂存。但鲜有人去挑战不声明中间变量的情况,下面的代码给出了这种实现。蛮有创意 的。

var a=1,b=2;a=[b,b=a][0];

 

万物皆对象

在JavaScript的世界,万物皆对象。除了nullundefined,其他基本类型数字,字符串和布尔值都有对应有包装对象。对象的一个特征是你可以在它身上直接调用方法。对于数字基本类型,当试图在其身上调用toString方法会失败,但用括号括起来后再调用就不会失败了,内部实现是用相应的包装对象将基本类型转为对象。所以(1).toString()相当于new Number(1).toString()。因此,你的确可以把基本类型数字,字符串,布尔等当对象使用的,只是注意语法要得体。

同时我们注意到,JavaScript中数字是不分浮点和整形的,所有数字其实均是浮点类型,只是把小数点省略了而以,比如你看到的1可以写成1.,这也就是为什么当你试图1.toString()时会报错,所以正确的写法应该是这样:1..toString(),或者如上面所述加上括号,这里括号的作用是纠正JS解析器,不要把1后面的点当成小数点。内部实现如上面所述,是将1.用包装对象转成对象再调用方法。

If语句的变形

当你需要写一个if语句的时候,不妨尝试另一种更简便的方法,用JavaScript中的逻辑操作符来代替。

var day=(new Date).getDay()===0;//传统if语句if (day) {
	alert('Today is Sunday!');};//运用逻辑与代替ifday&&alert('Today is Sunday!');

比如上面的代码,首先得到今天的日期,如果是星期天,则弹窗,否则什么也不做。我们知道逻辑操作存在短路的情况,对于逻辑与表达式,只有两者都真才结果才为真,如果前面的day变量被判断为假了,那么对于整个与表达式来说结果就是假,所以就不会继续去执行后面的alert了,如果前面day为真,则还要继续执行后面的代码来确定整个表达式的真假。利用这点达到了if的效果。

对于传统的if语句,如果执行体代码超过了1 条语句,则需要加花括号,而利用逗号表达式,可以执行任意条代码而不用加花括号。

if(conditoin) alert(1),alert(2),console.log(3);

上面if语句中,如果条件成立则执行三个操作,但我们不需要用花括号将这三句代码括起来。当然,这是不推荐的,这里是冷知识课堂:)

 

禁止别人以iframe加载你的页面

下面的代码已经不言自明了,没什么好多说的。

if (window.location != window.parent.location) window.parent.location = window.location;

 

console.table

Chrome专属,IE绕道的console方法。可以将JavaScript关联数组以表格形式输出到浏览器console,效果很惊赞,界面很美观。

//采购情况var data = [{'品名': '杜雷斯', '数量': 4}, {'品名': '冈本', '数量': 3}];console.table(data);

 

 

REFERENCE

Feel free to repost but keep the link to this page please!

分享到:
评论

相关推荐

    前端不为人知的一面:前端冷知识集锦

    今天看到Quora上一个帖子,瞬间又GET了好多前端技能,一些属于技巧,一些则是闻所未闻的冷知识,一时间还消化不过来。现分类整理出来分享给大家,也补充了一些平时的积累和扩展了一些内容。前端已经被玩儿坏了!像...

    前端学生作业毕设实训素材-蓝色制冷机械设备模板(带手机端).rar

    以下将详细阐述其中涉及的知识点: 1. **前端源码**:前端源码是实现网页交互和用户体验的关键部分,包括HTML、CSS和JavaScript等技术。在这个项目中,源码可能是用这些语言编写的,以创建一个蓝色主题的制冷机械...

    6-厨具制冷设备有限公司网站页面html模板源码.zip

    本文将详细解析"6-厨具制冷设备有限公司网站页面html模板源码"这一主题,涵盖HTML模板设计、网页布局、前端开发等相关知识点。 首先,HTML(HyperText Markup Language)是构建网页的基础语言,它定义了网页的结构...

    前端学生作业毕设实训素材-工业电子机械制冷设备类网站模板(带手机端).rar

    对于学习前端开发的学生来说,这个项目是一个很好的实践平台,涵盖了前端开发的多个方面,同时也涉及到后端和网站管理的知识,对理解全栈开发流程有很大帮助。通过实际操作,可以深入学习HTML、CSS、JavaScript基础...

    前端学生作业毕设实训素材-工业电子机械制冷设备类网站模板.rar

    对于一个学习项目来说,这个文件可能包含了基础的设置,帮助学生了解SEO(搜索引擎优化)的基础知识。 “news”和“case”可能是两个不同的目录,分别代表新闻或动态、案例展示等部分。这些目录下可能包含更多的...

    前端学生作业毕设实训素材-制冷压缩机机械设备类网站模板(带手机端).rar

    以下是该资源中涉及的一些关键知识点: 1. **前端源码**:前端源码是网站的客户端代码,包括HTML、CSS和JavaScript等,它们共同决定了网页的结构、样式和交互。在这个压缩包中,我们可能找到这些文件,通过学习和...

    FE_You_dont_know:分享在前端开发中,你不知道JavaScript、CSS和HTML趣味知识,增加你的知识面

    前端冷知识分享在前端开发中,你不知道JavaScript、CSS和HTML趣味知识,增加你的知识面。文章Canvas的4个渲染上下文Canvas滤镜的性能优化如何优雅地生成结构化的初始数据如何判断一个对象的某个属性是可写的如何禁止...

    前端项目-rxjs.zip

    这个名为"前端项目-rxjs.zip"的压缩包包含了一个RxJS的示例项目,文件名为"RxJS-master",我们可以从中学到许多关于RxJS的知识。 1. **响应式编程**:RxJS的核心理念是响应式编程,这是一种处理数据流和变化的编程...

    计算机应用基础的内容知识-计算机基础知识教程 学习WORD样本.docx

    衡量计算机性能的指标有CPU的主频、外频、前端总线速度,内存的类型、速率和容量,硬盘的容量和传输速度等。 计算机语言的发展经历了从机器语言、汇编语言到高级语言的演变,计算机只能直接理解机器语言。显示器的...

    执业药师资格考试-药学综合知识与技能考试重点-处方调配.pdf

    - 掌握药物的包装和贮存要求,如室温、阴凉处、凉暗处、冷处等不同环境下的储存条件。 5. 单剂量调配: - 单剂量配方系统可避免服错药和重复用药,提高制剂稳定性和患者用药安全性。 - 借助分包机将药品按一次...

    前端静态网页设计——科技边框图片

    在设计科技边框时,以下几个关键知识点是不容忽视的: 1. **线条与形状**:科技边框往往由直线、曲线或者不规则的几何形状构成,这与传统的边框图案形成对比,展现出未来感和创新性。直线代表稳定与秩序,而曲线则...

    行业分类-电子-关于发电用发动机前端轮系安装结构的说明分析.rar

    本文将详细解析标题和描述中提到的知识点,深入探讨发电用发动机前端轮系安装结构的原理、设计要点以及实际应用。 首先,发电用发动机前端轮系主要由曲轴、皮带轮、水泵、发电机、空调压缩机等组件构成。这些组件...

    电子政务-基础型水冷电缆.zip

    行业分类-电子政务-基础型水冷电缆.pdf 这个文件名暗示了内容可能涵盖了以下几个方面的知识点: 1. **电子政务系统架构**:介绍电子政务的整体架构,包括前端的公众服务平台、后台的数据库管理系统、以及支撑这些...

    学校实训毕业商用项目-冷工业设备网站源码-含手机端同步.zip

    本项目是一个学校实训毕业商用项目,主要涉及的是一个冷工业设备网站的源码,具备手机端同步功能。这个源码的开发旨在让学生在实践中提升HTML、前端等相关技能,为毕业后进入IT行业打下坚实基础。下面将详细阐述其中...

    汽车构造-冷却系统组成及结构.pptx

    3. 散热器:散热器主要由上储水室、下储水室、散热器芯、散热器盖和放水阀组成,它位于发动机前端,通过风扇增强空气流通,将冷却液携带的热量散发到大气中。散热器芯有两种常见类型:管片式和管带式,前者由扁形...

    中级汽车驾驶员试题与答案.docx

    - **知识点解析**:汽车前端突出点向前轮引的切线与地面的夹角被称为接近角,而非离去角。接近角与离去角是评价汽车通过性的两个重要参数。 11. **独立悬架与非独立悬架的区别** - 正确答案:错误 - **知识点...

    历年电子竞赛

    ### 历年电子竞赛知识点概述 #### 1994年 - **题目一:简易数控直流电源** - **知识点**: - 数字控制技术:利用微处理器或微控制器来控制电源的输出电压。 - 直流电源设计原理:包括直流变换器、反馈电路等。 ...

    leetcode众数-front-end:自整理前端小知识点

    自整理前端小知识点 本人仍在积极整理中,还请见谅,如有问题,请及时更正,万分感谢 :squinting_face_with_tongue: PS:is free :beaming_face_with_smiling_eyes: 如有喜欢,请尽情用star羞辱我 获取最新文章请关注...

    接触网作业车乘务员题库及答案.docx

    - **知识点:**接触网作业车轴箱编号按照从车辆前端开始编号的方式。 - **判断:**错误(应该是车辆前端右侧为1、3、5、7等,前端左侧为2、4、6、8等) **36. 连挂车辆时的安全距离** - **知识点:**连挂车辆时,...

Global site tag (gtag.js) - Google Analytics