会员登录 - 用户注册 - 设为首页 - 加入收藏 - 网站地图 20个既简单又实用的 JavaScript 小技巧!

20个既简单又实用的 JavaScript 小技巧

时间:2025-11-05 15:57:24 来源:益强数据堂 作者:IT科技类资讯 阅读:281次

1.滚动到页面顶部

我们可以使用 window.scrollTo() 平滑滚动到页面顶部。个既

const scrollToTop = () => {

window.scrollTo({ top: 0,简单 left: 0, behavior: "smooth" });

};

2.滚动到页面底部

当然,如果知道页面的又实用高度,也可以平滑滚动到页面底部。小技

const scrollToBottom = () => {

window.scrollTo({

top: document.documentElement.offsetHeight,个既

left: 0,

behavior: "smooth",

});

};

3.滚动元素到可见区域

有时我们需要将元素滚动到可见区域,我们应该怎么做?简单使用 scrollIntoView 就足够了。

const smoothScroll = (element) => {

element.scrollIntoView({

behavior: "smooth",又实用

});

};

4.全屏显示元素

你一定遇到过这样的场景,需要全屏播放视频,小技并在浏览器中全屏打开页面。个既

const goToFullScreen = (element) => {

element = element || document.body;

if (element.requestFullscreen) {

element.requestFullscreen();

} else if (element.mozRequestFullScreen) {

element.mozRequestFullScreen();

} else if (element.msRequestFullscreen) {

element.msRequestFullscreen();

} else if (element.webkitRequestFullscreen) {

element.webkitRequestFullScreen();

}

};

5.退出浏览器全屏状态

是简单的,这个和第4点一起使用,又实用你也会有退出浏览器全屏状态的小技场景。

const goExitFullscreen = () => {

if (document.exitFullscreen) {

document.exitFullscreen();

} else if (document.msExitFullscreen) {

document.msExitFullscreen();

} else if (document.mozCancelFullScreen) {

document.mozCancelFullScreen();

} else if (document.webkitExitFullscreen) {

document.webkitExitFullscreen();

}

};

6.获取数据类型

如何通过函数获取变量的个既数据类型?

const getType = (value) => {

const match = Object.prototype.toString.call(value).match(/ (w+)]/)

return match[1].toLocaleLowerCase()

}

getType() // undefined

getType({}}) // object

getType([]) // array

getType(1) // number

getType(fatfish) // string

getType(true) // boolean

getType(/fatfish/) // regexp

7.停止冒泡事件

一种适用于所有平台的防止事件冒泡的方法。

const stopPropagation = (event) => {

event = event || window.event;

if (event.stopPropagation) {

event.stopPropagation();

} else {

event.cancelBubble = true;

}

};

8. 深拷贝一个对象

如何复制深度嵌套的简单对象?

const deepCopy = (obj, hash = new WeakMap()) => {

if (obj instanceof Date) {

return new Date(obj);

}

if (obj instanceof RegExp) {

return new RegExp(obj);

}

if (hash.has(obj)) {

return hash.get(obj);

}

let allDesc = Object.getOwnPropertyDescriptors(obj);

let cloneObj = Object.create(Object.getPrototypeOf(obj), allDesc);

hash.set(obj, cloneObj);

for (let key of Reflect.ownKeys(obj)) {

if (obj[key] && typeof obj[key] === "object") {

cloneObj[key] = deepCopy(obj[key], hash);

} else {

cloneObj[key] = obj[key];

}

}

return cloneObj;

};

9. 确定设备类型

我们经常必须这样做才能在手机上显示 A 逻辑,在 PC 上显示 B 逻辑。免费源码下载又实用基本上,设备类型是通过识别浏览器的 userAgent 来确定的。

const isMobile = () => {

return !!navigator.userAgent.match(

/(iPhone|iPod|Android|ios|iOS|iPad|Backerry|WebOS|Symbian|Windows Phone|Phone)/i

);

};

10.判断设备是安卓还是IOS

除了区分是移动端还是PC端,很多时候我们还需要区分当前设备是Android还是IOS。

const isAndroid = () => {

return /android/i.test(navigator.userAgent.toLowerCase());

};

const isIOS = () => {

let reg = /iPhone|iPad|iPod|iOS|Macintosh/i;

return reg.test(navigator.userAgent.toLowerCase());

};

11.获取浏览器类型及其版本

作为前端开发人员,您可能会遇到各种兼容性问题,这时候可能需要获取浏览器的类型和版本。

const getExplorerInfo = () => {

let t = navigator.userAgent.toLowerCase();

return 0 <= t.indexOf("msie")

? {

//ie < 11

type: "IE",

version: Number(t.match(/msie ([d]+)/)[1]),

}

: !!t.match(/trident\/.+?rv:(([\d.]+))/)

? {

// ie 11

type: "IE",

version: 11,

}

: 0 <= t.indexOf("edge")

? {

type: "Edge",

version: Number(t.match(/edge/([d]+)/)[1]),

}

: 0 <= t.indexOf("firefox")

? {

type: "Firefox",

version: Number(t.match(/firefox/([d]+)/)[1]),

}

: 0 <= t.indexOf("chrome")

? {

type: "Chrome",

version: Number(t.match(/chrome/([d]+)/)[1]),

}

: 0 <= t.indexOf("opera")

? {

type: "Opera",

version: Number(t.match(/opera.([d]+)/)[1]),

}

: 0 <= t.indexOf("Safari")

? {

type: "Safari",

version: Number(t.match(/version/([d]+)/)[1]),

}

: {

type: t,

version: -1,

};

};

12.设置cookies

cookie 可能是我见过的最糟糕的 API,它很难使用,以至于我们不得不重新封装它以最大限度地提高开发效率。网站模板

const setCookie = (key, value, expire) => {

const d = new Date();

d.setDate(d.getDate() + expire);

document.cookie = `${key}=${value};expires=${d.toUTCString()}`;

};

13. 获取 cookie

除了写入 cookie 之外,我们还将参与其读取操作。

const getCookie = (key) => {

const cookieStr = unescape(document.cookie);

const arr = cookieStr.split("; ");

let cookieValue = "";

for (let i = 0; i < arr.length; i++) {

const temp = arr[i].split("=");

if (temp[0] === key) {

cookieValue = temp[1];

break;

}

}

return cookieValue;

};

14.删除cookies

删除 cookie 的想法是什么?其实,只要把它的过期时间设置为这一刻,它就会立即过期。

const delCookie = (key) => {

document.cookie = `${encodeURIComponent(key)}=;expires=${new Date()}`;

};

15.生成随机字符串

不知道大家有没有遇到过需要生成随机字符串的场景。我遇到过很多次,每次都要google一遍,直到学会这个工具功能。

const randomString = (len) => {

let chars = "ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz123456789";

let strLen = chars.length;

let randomStr = "";

for (let i = 0; i < len; i++) {

randomStr += chars.charAt(Math.floor(Math.random() * strLen));

}

return randomStr;

};

randomString(10) // pfkMfjEJ6x

randomString(20) // ce6tEx1km4idRNMtym2S

16. 字符串首字母大写

const fistLetterUpper = (str) => {

return str.charAt(0).toUpperCase() + str.slice(1);

};

fistLetterUpper(fatfish) // Fatfish

17.生成指定范围内的随机数

也许出于测试目的,我经常需要生成一定范围内的随机数。

const randomNum = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min;

randomNum(1, 10) // 6

randomNum(10, 20) // 11

18.打乱数组的顺序

如何打乱数组的原始顺序?

const shuffleArray = (array) => {

return array.sort(() => 0.5 - Math.random())

}

let arr = [ 1, -1, 10, 5 ]

shuffleArray(arr) // [5, -1, 10, 1]

shuffleArray(arr) // [1, 10, -1, 5]

19. 从数组中获取随机值

之前做过一个抽奖项目,需要让数组中的奖品随机出现。云服务器提供商

const getRandomValue = array => array[Math.floor(Math.random() * array.length)];

const prizes = [ $100,

(责任编辑:数据库)

上一篇:丁酉大炮(探索丁酉大炮的历史、制造和影响力)
下一篇:ubuntu安装和配置SVN第一步:安装apache2  libapache2-svn subversion复制代码代码如下:复制代码代码如下:复制代码代码如下:apt-get install subversion2. 建立svn仓库1). 建立svn目录:mkdir /home/.svn(使用隐藏目录)2). cd /home/.svn    3). mkdir astar4). 创建仓库astar:svnadmin create /home/.svn/astar,执行完毕后astar目录有svnadmin创建的目录和文件5). mkdir test6). 创建仓库test:svnadmin create /home/.svn/test,执行完毕后test目录有svnadmin创建的目录和文件3. 配置和管理svn1). 每个仓库的配置文件在$repos/conf/下,vi svnserve.conf,配置项在[general]下:anon-access:匿名用户的权限,可以为read,write和none,默认值read。不允许匿名用户访问:anon-access = noneauth-access:认证用户的权限,可以为read,write和none,默认值write。password-db:密码数据库的路径,去掉前边的#authz-db:认证规则库的路径,去掉前边的#。注意:这些配置项的行都要顶格,否则会报错。修改配置后需要重启svn才能生效。2). 配置passwd文件这是每个用户的密码文件,比较简单,就是“用户名=密码”,采用的是明码。如allen=1111113). 配置authz文件1. [groups] section:为了便于管理,可以将一些用户放到一个组里边,比如:owner=allen,ellen2. groups下边的sections表示对一个目录的认证规则,比如对根目录的认证规则的section为[/]。设置单用户的认证规则时一个用户一行,如:  [/]      allen=rw  #allen对根目录的权限为rw  ellen=r    #ellen对根目录的权限为r  假如使用group,需要在group名字前加@,如  @owner=rw  #group owner中的用户均为rw,等价于上边的两句话启动时假如从/home/.svn/astar启动,/就是astar目录,用如上方式以astar目录为根设置权限。假如从/home/.svn/启动,每个仓库根还是自己的起始目录。可以采用如上方式设置astar的权限,也可以采用如下方式:  [astar:/]  @owner=rw设置test的权限如下:  [test:/]  @harry_and_sally = rw简言之,每个仓库的根目录(/)就是自己的起始目录;[repos:/]这种方式只适用于多仓库的情况;[/]适合于单仓库和单仓库的方式。3. 不能跨越仓库设置权限。4. 启动和停止svn    1). 启动:1. 从astar目录启动,svnserve -d -r /home/.svn/astar,根目录(/)是astar,authz中规则的配置使用section[/]。访问方式为:  svn://192.168.0.87/2. 从.svn目录启动,svnserve -d -r /home/.svn,根目录(/)是.svn,authz中对astar的配置使用section[astar:/] ,对test的配置使用section[test:/]。访问方式为:  svn://192.18.0.87/astar  svn://192.18.0.87/test假如需要svn自启动,把命令加入/etc/rc.local中2). 检查svn服务器是否已经启动(svn默认使用3690端口):netstat -an | grep 36903). 停止:killall svnserve5. svn client推荐使用TortoiseSVN, http://tortoisesvn.tigris.org/Eclipse插件,http://subclipse.tigris.org/作者 t80t90s
推荐内容
  • 1 sudo apt-get install vsftpd 2 sudo nano /etc/vsftpd.conf 修改如下 3 anonymous_enable=YES 允许匿名用户访问 write_enable=YES # anon_world_readable_only=YES # anon_other_write_enable=YES
  • 六个动作让windows7系统不显示上次的用户名
  • 只保留一个Windows窗口 其他全部最小化的方法介绍
  • windows 7系统桌面图标虚线框影响美观如何将其取消
  • 三星TN屏的特点与评价(探索三星TN屏的色彩表现与视角稳定性)
  • windows7系统如何清理(IE/磁盘)缓存