
js
前端OnTheRun
这个作者很懒,什么都没留下…
展开
-
2023-04-14 使用纯JS实现一个2048小游戏
一.实现思路1.2048的逻辑2.移动操作的过程中会有三种情况二.代码部分:分为初始化部分和移动部分1.初始化部分1.1.生成第一个方块:1.2.生成第二个方块:2.移动过程部分:三.实现代码1.HTML部分2.CSS部分3.JS部分3.1.game对象的属性3.2.game对象的start方法3.3.game对象的randomNum方法3.4.game对象的dataView方法3.5.game对象的isGameOver方法3.6.game对象中设置移动的方法(以左移动为例原创 2023-04-14 21:36:33 · 2402 阅读 · 1 评论 -
2023-01-26 JS设计模式-单例模式:单例模式的原理和实现,懒汉模式和饿汉模式,单例模式实现登录框
1.什么是单例模式?介绍单例模式是最简单的设计模式之一,属于创建型模式,单例模式提供了一种创建对象的最佳方式特点-单例模式的类(单例类)只有一个实例对象这个单例对象必须由单例类创建单例类对外提供一个访问这个单例的全局访问点结构单例类:包含一个实例且能自行创建这个实例的类访问类:使用单例的类2.如何实现一个单例模式?思路通过单例模式的特点:一个类只有一个实例,先判断实例存在与否,若存在,则直接返回若不存在,则创建了再返回*在JS中单例作为一个命名空间提供者,从全局命名空原创 2023-01-26 13:45:29 · 1056 阅读 · 0 评论 -
2022-01-24 JS常见设计模式
文章目录1.什么是设计模式?2.为什么要使用设计模式?3.有哪些设计模式?4.单例模式定义:在内存中只会创建且仅创建一次对象的设计模式实现原理示例1.什么是设计模式?设计模式是一套经反复使用,多人知晓,经过分类的代码设计经验的总结2.为什么要使用设计模式?为了代码的可复用性,让代码更便于理解,保证代码的可靠性设计模式使代码实现了真正的工程化3.有哪些设计模式?构造器模式模块化模式暴露模块模式单例模式中介者模式原型模式命令模式外观模式工厂模式mixin模式装原创 2022-01-24 22:05:48 · 161 阅读 · 0 评论 -
2021-11-07 一个查询成绩的例子回顾switch关键字的用法和要点
代码var score = parseInt(prompt("请输入你的成绩:"));switch (score) { case 90: console.log("你的成绩是", score, ",为优秀"); break; case 60: console.log("你的成绩是", score, ",为及格"); break; default: console.log("你的成绩是", score,原创 2021-11-07 17:14:32 · 235 阅读 · 0 评论 -
2021-10-24 举例理解prototype的作用
prototype的诞生初衷是为了节约内存把共有的属性和方法放到prototype上,而不是每个对象都存着这些共有属性和方法从而达到节省内存的目的理解prototype就像是一类物品的共有部分(如:轮子),加上特有部分,构成了差异性而__proto__是访问这个共有部分的钥匙new一个对象时发生了什么1.新建一个空对象2.空对象.__proto__=原对象.prototype3.根据上下文绑带赋值(空对象.name=name)4.return这个对象例子function puti(原创 2021-10-24 17:20:04 · 230 阅读 · 0 评论 -
2021-09-18 示例:构造函数,原型和实例对象的关系
1.实例对象的constructor指向其构造函数2.构造函数的prototype可以被所有实例对象调用3.所有实例的sex属性和say方法都是同一个内存地址,都指向prototype对象原创 2021-09-18 22:54:10 · 102 阅读 · 0 评论 -
2021-09-19 验证:实例对象的constructor属性指向其构造函数
// 构造函数Personfunction Person(name, age) { this.age = age; this.name = name; this.say = function() { console.log("我叫", this.name); }}// 验证:实例对象p的constructor属性指向构造函数Personvar p = new Person("张三", 18);console.log(p.constructor ===原创 2021-09-19 09:58:32 · 377 阅读 · 0 评论 -
2021-08-23 nodejs中设置cookie的步骤
1.安装cookie-parser:命令:npm install cookie-parser --save2.引入var express = require("express");var cookieParser = require("cookie-parser");var app = new express();3.设置中间件app.use(cookieParser());设置和读取cookieapp.get('/', function(req, res) { console原创 2021-08-23 19:50:28 · 2481 阅读 · 0 评论 -
2021-08-22 axios设置拦截器
定义axios是一个基于promise的http客户端(Promise based HTTP client)可以发送get和post请求特性1,在浏览器中发送XMLHttpRequests2.在node中发送http请求3.支持promise的API4.拦截请求和响应5.转换请求数据和响应数据6.取消请求7.自动转换JSON数据8.客户端支持保护安全面受XSRF攻击使用场景浏览器发送请求,node发送请求,在vue,reactnode等项目中使用axiosaxios设置拦截器原创 2021-08-23 19:43:56 · 124 阅读 · 0 评论 -
2021-08-11 面试题:cookies,sessionstorage和localStorage的区别以及cookies,token和session的定义与区别
1.面试题:cookies,sessionstorage和localStorage有什么区别?1.定义:1.cookies是网站为了标示不同用户的身份而储存在用户本地终端上的数据2.cookies始终在同源的http中携带,在浏览器和服务器之间来回传递3.sessionStorage和localStorage不会自动发送数据给服务器,仅仅在本地保存2.存储大小1.cookie大小不能超过4k2.sessionStorage和localStorage可以达到5M3.有效时间1.coo原创 2021-08-11 08:06:08 · 349 阅读 · 0 评论 -
2021-07-26 Promise的定义和使用
1.异步1.1.异步操作的定义可以与主程序同时执行的操作1.2.js常见异步1.定时器&延时器:setTimeout和setInterval2.动画:animate3.网络请求:request1.3.异步代码的缺点回调地狱:函数嵌套函数2.promise2.1.定义promise是ES6中引入的一种异步编程解决方案2.2.语法var p=new Promise(function(resolve,reject){})2.3.示例原创 2021-07-26 21:53:16 · 77 阅读 · 0 评论 -
2021-07-11 ajax的三个函数封装:get,post,jsonp
function request(ops) {// 1.处理参数:可选参数要有默认值,可选函数须先判断let { url, success, type = “get”, data = {}, error, timeout = 1000, dataType = “text”, filedName = “” } = ops;//4.处理数据let str = ‘’;for (var i in data) {str += ${i}=${data[i]}&;}//5.根据请求方式拼接url原创 2021-07-11 00:44:45 · 118 阅读 · 0 评论 -
2021-07-28 使用async和await改进Promise异步操作的写法
Promise实现异步操作//假设有4个异步方法要按顺序调用new Promise(function(resolve){ ajaxA("xxxx", ()=> { resolve(); }) }).then(function(){ return new Promise(function(resolve){ ajaxB("xxxx", ()=> { resolve(); }) })}).then(function(){ return n原创 2021-07-28 08:22:11 · 286 阅读 · 0 评论 -
2021-07-24 JS难点整理:函数防抖&函数节流,闭包和原型链的概念和用法
一.函数防抖和函数节流二.闭包定义描述原理1.计算机的回收机制2.函数的定义作用域形成闭包的三个条件示例闭包的特点优点:缺点:使用闭包的目的闭包的两个应用场景1.循环中的事件获取循环每次执行的计数器2.给内置方法的缓存调函数传参三.原型链1.对象的__proto__1.1.万物皆对象,每个对象都有一个属性,这个属性叫做隐式原型,即__proto__1.2.一个对象的隐式原型指向其构造函数的原型链属性(__proto__指向prototype)1.3.这种指向使得对象原创 2021-07-24 11:43:49 · 182 阅读 · 0 评论 -
2021-07-21 技巧:实现字符串翻转的步骤
步骤:1.字符串转化成字符数组2.字符数组元素翻转3.字符数组转化成字符串代码: console.log("hello".split('').reverse().join(''));//olleh原创 2021-07-21 19:57:29 · 76 阅读 · 0 评论 -
2021-07-04 实现网页图片懒加载
文章目录思路代码htmljs效果思路在图片没有进入可视区域时,先不给的src赋值,这样浏览器就不会发送请求了,等到图片进入可视区域再给src赋值1.加载loading图片2.判断哪些图片要加载3.隐形加载图片4.替换真图片代码html<img src="./load.gif" alt="pic" class="lazy" data-src="./14.jpg"><img src="./load.gif" alt="pic" class="lazy" data-src=原创 2021-07-04 14:35:31 · 106 阅读 · 0 评论 -
2021-06-30 给登录框设置正则条件
思路若正则test条件为true则显示正确语句,否则显示出错误语句代码html用户名:<input type="text" placeholder="用户名/邮箱/QQ号/手机号"><span></span><br> 密 码:<input type="password"><span></span><br> 确认密码:<input type="pass原创 2021-06-30 00:07:41 · 119 阅读 · 0 评论 -
2021-06-28 可设置中奖人数的随机不重复抽奖
1.动态创建ul下的li节点并让其文本内容为每个候选名字2.定时器中随机获取的每个li名字输出到页面3.当获取的名字等于带=待获取的中奖人数的数量时清除定时器原创 2021-06-28 00:14:23 · 662 阅读 · 1 评论 -
2021-06-24 css选项卡的实现
鼠标移动到每个选项上时,对应选项栏变色,内容栏显示相应的内容原创 2021-06-24 09:25:45 · 307 阅读 · 0 评论 -
2021-06-23 自由落体运动,抛物线运动和缓冲运动的实现
目录思路:代码思路:1.小球落下:设置绝对定位,定时器中改变其top值2.运动停止:设置目标值,达到目标值时清除定时器3.回弹:单次方向到头时究竟器反向运动并缩小上限代码html:<input type="button" value="点击开始"><div style="width: 111px;height: 111px;border-radius:50%;background:red;position:absolute"></div>js:let原创 2021-06-23 08:46:39 · 601 阅读 · 1 评论 -
2021-06-14 localStorage统计鼠标点击次数(网页重开可继续统计)
html: <p><button onclick="clickCounter()" type="button">点我!</button></p> <div id="result"></div>js: var result = document.getElementById("result"); function clickCounter() { if (localStorage.cli原创 2021-06-14 21:54:21 · 559 阅读 · 0 评论 -
2021-06-13 使用node进行前后端交互的步骤
step1 准备一个数据库文件data.json其格式是一个以键值对形式存在的json字符串为数组元素的数组step2 准备一个服务器文件server.js其内容至少包含有node的http等内置模块,开启服务器并设置监听的端口号step3 准备一个前端网页文件 login.htmlstep4 在相应的目录路径下打开cmd小黑框,输入命令 node server.js,表示开启服务器step5 在浏览器地址栏中文件名之前的路径改成localhost:端口号...原创 2021-06-13 01:20:31 · 351 阅读 · 0 评论 -
2021-06-12 event.target的定义和它与this的区别
什么是event.target.value?event常用event(或eve,e等等)来接收事件对象event.target事件对象作为对象,有其属性和方法,其中target属性的作用是获取触发事件的目标,即绑定事件的元素event.target.value获得当前元素target属性的属性值总结:event.value获取的是当前的(点击移动等等)事件)元素event.target.value获取的是当前元素输入(或选择)的值event.target和this的区别是什么?区别:原创 2021-06-12 15:51:26 · 827 阅读 · 0 评论 -
2021-06-10 事件委托和event.target
// 事件委托是利用事件的冒泡原理来实现的,何为事件冒泡呢?就是事件从最深的节点开始,然后逐步向上传播事件,举个例子:页面上有这么一个节点树,div>ul>li>a;比如给最里面的a加一个click点击事件,那么这个事件就会一层一层的往外执行,执行顺序a>li>ul>div,有这样一个机制,那么我们给最外面的div加点击事件,那么里面的ul,li,a做点击事件的时候,都会冒泡到最外层的div上,所以都会触发,这就是事件委托,委托它们父级代为执行事件. /...原创 2021-06-10 08:33:51 · 389 阅读 · 0 评论 -
2021-05-23 get和post的一些区别
区别getpost数据量小大发送数据方式地址栏非地址栏安全性低高历史记录有保存无保存用途从服务器接收数据向服务器发送数据原创 2021-05-23 20:39:01 · 71 阅读 · 0 评论 -
2021-05-22 验证:只能通过类名调用static修饰的类属性和类方法以及static的主要使用场景
结论;static修饰的属性和方法是属于类的,只能通过类名调用static的主要使用场景:给JS循环的HTML标签绑定DOM0级事件原创 2021-05-22 09:00:49 · 552 阅读 · 0 评论 -
2021-05-21 事件冒泡和阻止事件冒泡
事件冒泡: 子元素设置的事件被执行时,其所有设置了同一事件的父元素也会执行的现象var wrap = document.querySelector(".wrap");var box = document.querySelector(".box");wrap.onclick = function() {console.log("我是wrap");}box.onclick = function() {console.log("我是box");}//输出结原创 2021-05-21 08:11:30 · 186 阅读 · 0 评论 -
2021-05-20 this指向总结
1.对象中的this指向对象 2.全局函数中的this指向window 3.事件回调函数 3.1.行内绑定传参的this指向window 3.2.行内绑定不传参的this指向本身 3.3.动态绑定的this指向当前节点 4.构造函数调用模式 this —> 创建出来的实例 new 函数名() 5.箭头函数中this没有明确指向,会向上一级(宿主对象)寻找 6.定时器中的this指向window原创 2021-05-20 08:17:16 · 104 阅读 · 0 评论 -
2021-05-18 形成闭包的三个条件
1.需要有外部函数嵌套内部函数2.在内部函数中访问外部函数的变量3.在此嵌套函数外,用变量引用内部函数例子://1.这是一个outerFunc嵌套innerFunc的嵌套函数function outerFunc() { var num = 110; return function innerFunc() { //2.在innerFunc中访问outerFunc的局部变量num var num1 = 2 * num; console.l原创 2021-05-18 10:12:41 · 187 阅读 · 0 评论 -
2021-05-17 字符串数组常见15个API
//indexOf,chatAt,charCodeAt,substr,substring,concat//search,replace,match,slice,split//toLocaleLowerCase,toLocaleUpper,toLowerCase,toUpperCasevar str="Hello World";console.log(str.indexOf('ll',2));//从第三个字符开始查找ll字符串,返回其索引或-1console.log(str.charAt(7));原创 2021-05-17 08:17:09 · 161 阅读 · 0 评论 -
2021-05-09 验证:多个DOM2级同名鼠标事件不会相互覆盖,而行内绑定和动态绑定会覆盖
<input<input type="button" value="我是DOM 0级事件" id="btn0" onmousedown="fn0()" onclick="fn1()" onclick="fn2()"><br><input type="button" value="我是DOM 1级事件" id="btn1"><br><input type="button" value="我是DOM 2级事件" id="btn2"><原创 2021-05-09 10:28:00 · 129 阅读 · 0 评论 -
2021-05-07 js的尺寸,位置和坐标汇总
IE:1.document.body.clientWidth/Height body对象的宽高2.document.documentElement.clientWidth/Height 可视区域的宽高3.document.documentElement.scrollTop/Left(有没有?) 垂直/水平方向滚动的值只读:1.clientWidth/Height 元素的可见宽高(=content+padding)2.clientLeft/Top 读取元素的borde原创 2021-05-06 08:26:31 · 239 阅读 · 0 评论 -
2021-05-05 JSON的转化函数以及在cookie的存取场景中的格式处理
JS: var obj = {name: "张三",age: 18} //对象转化为字符串 var str = JSON.stringify(obj); console.log(str, typeof(str)); //{"name":"张三","age":18} string //字符串转化为对象 var obj2 = JSON.parse(str); console.log(obj2, typeof(obj2)); //object: age:原创 2021-05-05 21:38:08 · 286 阅读 · 0 评论 -
2021-05-04 淘宝轮拨图的实现思路和完整代码
需求1.实现鼠标移入移出时左右键的显示和隐藏2.点击左键实现切换到上一张,点击右键切换下一张3.点击序号12345的小图标可以切换到对应的第几张图片,并且当前图片对应的序号被选中(变颜色)4.没有鼠标点击时可以实现自动播放......原创 2021-05-04 19:26:06 · 131 阅读 · 0 评论 -
2021-05-03 逻辑运算符的表达式的值
1.与逻辑运算符: a&&b 当a不为0时,表达式的值为b 当a为0时,表达式的值为0 举例: var a1=0,a2=3,b=6; console.log(a1&&b,a2&&b);//0 6 &nb原创 2021-05-03 21:26:37 · 676 阅读 · 0 评论 -
2021-05-02 瀑布流的多种实现方式
主要思路:若图片索引小于列数: 正常输出,  并用一个空数组记录第一行每张图片的高度若图片索引大于列数: 先找出高度数组的最小值,并在最短图片的下方添加图片 更新其高度(此时新的最短图片出现了) 重复以上步骤.原创 2021-05-02 11:59:50 · 152 阅读 · 0 评论