Skip to content

Instantly share code, notes, and snippets.

View JobbyM's full-sized avatar
🎯
Focusing

JobbyM

🎯
Focusing
View GitHub Profile
@JobbyM
JobbyM / polygon.js
Created July 10, 2017 09:23
使用moveTo()、lineTo()和closePath() 方法绘制规则多边形
// 使用moveTo()、lineTo()和closePath() 方法绘制规则多边形
// 定义一个以(x, y) 为中心,半径为r 的规则n 边行
// 每个定点都是均匀分布在圆周上
// 将第一个顶点放置在最上面,或者指定一定角度
// 除非最后一个参数是true,否则顺时针旋转
function polygon(c, n, x, y, r, angle, counterclockwise){
angle = angle || 0;
counterclockwise = counterclockwise || false;
c.moveTo(x + r*Math.sin(angle), // 从第一个定点开始一条新的子路径
y - r*Math.cos(angle)); // 使用三角法计算位置
@JobbyM
JobbyM / PieChart.html
Created July 10, 2017 07:14
使用JavaScript 和SVG 来绘制饼状图
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>PieChart</title>
<script src="PieChart.js"></script>
</head>
<body onload="document.body.appendChild(
pieChart([12, 23, 34, 45], 640, 400, 200, 200, 150,
['red', 'blue', 'yellow', 'green'],
@JobbyM
JobbyM / rollover.js
Created July 10, 2017 02:24
优雅的图片翻转实现方式
/**
* rollover.js: 优雅的图片翻转实现方式
*
* 要创建图片翻转效果,将此模块引入到HTML 文件中
* 然后在任意<img> 元素上使用data-rollover 属性来指定翻转图片的URL 即可
* 如下所示:
*
* <img src="normal_image.png" data-rollover="rollover_image.png">
*
* 要注意的是,此模块依赖与onLoad.js
@JobbyM
JobbyM / permanote.appcache
Last active July 10, 2017 01:05
展示了PermaNote 应用的事件驱动逻辑的概述
CACHE MANIFEST
# PermaNote v8
permanote.html
permanote.js
NETWORK:
note
@JobbyM
JobbyM / cookieStorage.js
Created July 7, 2017 09:25
cookieStorage.js 实现基于cookie存储API
/*
* cookieStorage.js
* 本类实现像localStorage 和sessionStorage 一样的存储API,不同的是,基于HTTP cooki 实现它
*/
function cookieStorage(maxage, path){ // 两个参数分别代表存储有效期和作用域
// 获取一个存储全部cookie 信息的对象
var cookie = (function(){
var cookie = {}; // 初始化最后要返回的对象
var all = document.cookie; // 在一个大字符串中获取所有的cookie 值
@JobbyM
JobbyM / 49.js
Last active July 7, 2017 08:56
存储cookie、获取cookie
// 以名/值的形式存储cookie
// 同时采用encodeURIComponent() 函数进行编码,来转义分号、逗号和空白符
// 如果daysToLive 是一个数字,设置max-age 属性为该数值表示cookie 直到指定的天数
// 到了才会过期。如果daysToLive 是0 就表示删除cookie
function setcookie(name, value, daysToLive){
var cookie = name + "=" + encodeURIComponent(value);
if(typeof daysToLive === "number")
cookie +="; max-age=" + (daysToLive*60*60*24);
document.cookie = cookie;
}
@JobbyM
JobbyM / EventSourceEmulation.js
Created July 6, 2017 07:14
一个使用EventSource 的简易聊天客户端
// 用XMLHttpRequest 模拟EventSource
// 在不支持EventSource API 的浏览器里进行模拟
// 需要有一个XMLHttpRequest 对象在新数据写到长期存在的HTTP 连接中时发送readystatechange 事件
// 注意,这个API 的实现是不完整的
// 它不支持readyState 属性、close() 方法、open 和error 事件
// 消息事件也是通过onmessage 属性注册的--这个版本还没有定义addEventListener() 方法
if(window.EventSource === undefined){ // 如果未定EventSource 对象
window.EventSource = function(url){ // 像这样进行模拟
var xhr; // HTTP 连接器
@JobbyM
JobbyM / 48.js
Created July 6, 2017 00:23
使用script 元素发送JSONP 请求
// 根据指定的URL 发送一个JSONP 请求
// 然后把解析得到的响应数据传递给回调函数
// 在URL 中添加一个名为jsonp 的查询参数,用于指定该请求的回调函数的名称
function getJSONP(url, callback){
// 为本次请求创建一个唯一的回调函数名称
var cbnum = "cb" + getJSONP.counter ++; // 每次自增计数器
var cbname = "getJSONP." + cbnum; // 作为JSONP 函数的属性
// 将回调函数名称以表单编码的形式添加到URL 的查询部分中
// 使用jsonp 作为参数名,一些支持JSONP 的服务
@JobbyM
JobbyM / 47.js
Created July 5, 2017 09:25
使用HEAD 和CORS 请求链接详细信息
/**
* linkdetail.js
*
* 这个常见的JavaScript 模块查询有href 属性但没有title 属性的所有<a> 元素
* 并给它们注册onmouseover 事件处理程序
* 这个事件处理程序使用XMLHttpRequest HEAD 请求取得链接资源的详细信息
* 然后把这些详细信息设置为链接的title 属性
* 这样它们将会在工具提示中显示
*/
whenReady(function(){
@JobbyM
JobbyM / 46.js
Created July 5, 2017 07:38
实现超时
// 发起HTTP GET 请求获取指定URL 的内容
// 如果响应成功到达,传入responseText 给回调函数
// 如果响应在timeout 毫秒内没有到达,中止这个请求
// 浏览器可能在abort() 后触发"readystatechange"
// 如果是否部分请求结果到达,甚至可能设置status 属性
// 所以需要设置一个标记,当部分且超时的响应到达时不会调用回调函数
// 如果使用load 事件就没有这个风险
function timedGetText(url, timeout, callback){
var request = new XMLHttpRequest(); // 创建新对象
var timedout = false; // 是否超时