web前端

js实现拖拽与碰撞检测

这篇文章主要为大家详细介绍了js实现拖拽与碰撞检测,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了js实现拖拽与碰撞检测的具体代码,供大家参考,具体内容如下

js实现拖拽与碰撞检测

拖拽

原理分析

对于拖拽一个div盒子,首先我们需要将鼠标移动到盒子上,然后按住鼠标左键,移动鼠标到目标位置,再松开鼠标,对于这一过程的分析,

显然需要三个鼠标事件:

  •  按住鼠标:onmousedown
  •  移动鼠标:onmousemove
  •  松开鼠标:onmouseup

实现步骤

1、**鼠标按下时:**我们获取鼠标当前所在的位置距离页面左边界与上边界的距离,分别减去盒子距离页面左边界与上边界的值,这样我们

就得到了鼠标距离盒子左边界与上边界的值;

2、**鼠标移动时:**我们重新获取此时鼠标距离页面左边界与上边界的值,再用它们减去步骤一中得到的鼠标距离盒子左边界与上边界的

值,将得到的值重新赋给盒子,这样盒子就能与鼠标保持相对静止,在页面上移动;

3、**松开鼠标时:**将鼠标移动事件清除。

实现代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

JS中获取cookie的最简单方式

const getCookie = (name) => document.cookie.match(`[;\s+]?${name}=([^;]*)`)?.pop();

// 比如cookie如下: a=b; c=d
// 使用
getCookie('c') // d

其中match是字符串的原型方法。

str.match(regexp)

如果传入一个非正则表达式对象,则会隐式地使用 new RegExp(obj) 将其转换为一个 RegExp

以上,所以完全不必写一个正则,因为正则拼字符串还要使用new RegExp构造方法,然而match内部。已经隐式的判断了。

string原型上search方法同样的实现原理,因为后者指返回索引,类似indexOf,所以性能会好一些。

有点跑题,不妨跑的再远一些。。。

其实string身上的match方法实际是调用了正则原型RegExp[Symbol.match]方法。

const str = 'foo';
str.match(/foo/); // ['foo']
RegExp.prototype[Symbol.match].call(/foo/, str); //['foo']

js函数明明已经定义,却显示xxx()is not defined的解决办法

在js代码中,偶尔会碰到函数明明已经定义,却提示xx() is not defined
如下如:
在这里插入图片描述
js代码如下:
在这里插入图片描述
明明已经执行了一遍了,但是定时器里的就是找不到

一直出现上面的错误提示

解决办法其实很简单,将代码改写为如下形式即可:
在这里插入图片描述
完美解决!!快去试试吧。

底层原理目前还不清楚,想起来了再来填坑。

将元素从iframe中拖拽到上层网页的任意位置。

iframe代码: json

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>HTML文档</title>
<meta name="keywords" content="">
<meta name="description" content="">
</head>

<body>

    <div draggable='true' id="hahaha" class="box">

ddddd 
    </div>


    <div draggable='true' id="hahaha2" class="box">

      ddddd 
          </div>
<script>

    /** Iframe code **/
//say you have this div inside 

web客户端存储

现代 web 浏览器提供了很多在用户电脑 web 客户端存放数据的方法 — 只要用户的允许 — 可以在它需要的时候被重新获得。这样能让你存留的数据长时间保存,保存站点和文档在离线情况下使用,保留你对其站点的个性化配置等等。本篇文章只解释它们工作的一些很基础的部分。

Prerequisites: JavaScript 基础 (查看 第一步构建的块JavaScript 对象), 基础的客户端 API
Objective: 学习如何使用客户端存储 API 来存储应用数据。

IndexedDB API

indexedDB 是用于客户端存储大量结构化数据(包括文件/blob)的低级 API。此 API 使用索引来启用对这些数据的高性能搜索。虽然Web 存储对于存储少量数据很有用,但它对于存储大量结构化数据的用处不大。IndexedDB 提供了一个解决方案。这是 MDN 的 IndexedDB 覆盖范围的主要登录页面——在这里我们提供了指向完整 API 参考和使用指南、浏览器支持详细信息以及关键概念的一些解释的链接。

注意:此功能在Web Workers中可用

注意: IndexedDB API 功能强大,但对于简单的情况可能看起来过于复杂。如果您更喜欢简单的 API,请尝试另请参阅部分中的库,这些库使 IndexedDB 对程序员更友好。

浏览器数据库 IndexedDB(一) 概述

IndexedDB 就是浏览器提供的本地数据库,它可以被网页脚本创建和操作。

背景

随着浏览器的功能不断增强,越来越多的网站开始考虑,将大量数据储存在客户端,这样可以减少从服务器获取数据,直接从本地获取数据。

现有的浏览器数据储存方案,都不适合储存大量数据:Cookie 的大小不超过4KB,且每次请求都会发送回服务器;LocalStorage 在 2.5MB 到 10MB 之间(各家浏览器不同),而且不提供搜索功能,不能建立自定义的索引。所以,需要一种新的解决方案,这就是 IndexedDB 诞生的背景。…

编写更好代码的 50 条 JavaScript 最佳实践规则

JavaScript 功能强大且灵活,它允许您以任何您喜欢的方式编写代码,并尝试一些非常不寻常的事情,这些事情可能会导致代码中的错误。以下是我学到的关于 JavaScript 编码的 50 件事,你应该知道。

始终“使用严格”开启

如果您为 JavaScript 使用任何库/框架或编译器,可能会启用“use strict”,但以防万一,请记住将其添加到文件和函数中。如果您不包含它,它将确保您得到会静默发生的错误。

一文看懂JS异步编程,回调、Promise、Generator、async/await用法详解

JavaScript是一种单线程的编程语言,需要通过异步的方式才能获得较高的性能。然而异步编程对于刚开始进行学习的时候往往会使大家产生困扰。

何为同步/异步
举个例子:如果现在你需要完成两件事情,烧水和吃饭。那么你会如何进行时间分配呢?

方法一:首先烧水,然后等待水烧开后再吃饭。…