小编Big*_*ame的帖子

如何知道元素是否被渲染?

我的元素有 transition: transform .5s

然后它有一个单独的类: transform: translatex(-100%)

所以我想要实现的是,最初,元素位于左侧. 在窗口上载,渲染元素时,我删除了变换类,浏览器会将元素设置为正确的位置.

但实际发生的是,当页面变得可见/渲染时,元素已经处于正确的位置.并且没有动画.

我试过setTimeout(function() {}, 0);它不起作用.如果我setTimeout 1秒,它可以工作,但有时渲染需要很长时间,我必须setTimeout 2秒.但有时它会变得很快,2秒钟需要等待很长时间.

总的来说,我觉得这不是一种可靠或正确的方法.

我怎样才能达到我想要的,正确的方法?


编辑:对不起家伙,在尝试组装演示后,我意识到我没有在窗口上卸载类.这是因为我的元素及其javascript和css都加载了AJAX.所以它可以在窗口加载之前或窗口加载之后发生.

无论如何,现在我的问题是,如果窗口需要很长时间才能加载怎么办?是否有可能在窗口加载之前渲染我的元素?或者浏览器仅在整个窗口完成加载时呈现?

因为我想尽快为元素制作动画.那么,在窗口需要很长时间才能加载(图像和连接缓慢,以及东西)的情况下,等待窗口加载是否安全?

如果我在窗口加载后用AJAX加载元素,我可以通过删除转换立即运行动画吗?或者我应该检测元素何时被渲染?

javascript css

10
推荐指数
1
解决办法
1万
查看次数

循环 NodeList:Array.prototype.forEach.call() 与 Array.from().forEach

所以我想要一种简单的方法来循环节点列表,但我一直讨厌不能forEach在节点列表上使用。

所以,现在我这样做:Array.prototype.forEach.call(nodeList, callback)

对于索引,我做:Array.prototype.indexOf.call(nodeList, node)

对于几乎所有的事情,我都在nodeLists上使用Array.prototype。

但我想知道这些是否被视为黑客?

他们的做法正确吗?

另外,假设我实际上不需要 nodeList 中的数组,那么使用它是否有优势Array.from(nodeList).forEach(callback)

javascript arrays foreach prototype nodelist

7
推荐指数
1
解决办法
2643
查看次数

new Event('build') vs new CustomEvent('build')

在此 MDN 页面创建和触发事件中,它显示了使用Event或来创建事件的示例CustomEvent。它解释了CustomEvent允许自定义细节,但除此之外,它并没有说太多。

那么区别是什么呢?如果我正在创建一个通用的滚动事件,我应该使用CustomEvent? 还是仅针对javascript中不存在的事件?

另外,我注意到它MouseEvent也是 的子级Event,所以如果我要创建点击事件,我可以只使用new MouseEvent('click')?

谢谢

javascript

6
推荐指数
1
解决办法
1538
查看次数

classList.toggle('class',true)vs classList.add

正如标题所说.我似乎无法看到两者之间的区别,我似乎无法看到第二个参数的切换点.

有人可以向我解释一下吗?

javascript

4
推荐指数
1
解决办法
2019
查看次数

IndexedDB用户权限

大家好

我在此页面上阅读过[使用IndexedDB]:https : //developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Using_IndexedDB

该浏览器将提示用户授予创建indexedDB的权限,并且该用户可能会拒绝该权限。请参阅下面的引用:

最可能的问题是用户决定不授予您的Web应用程序创建数据库的权限。IndexedDB的主要设计目标之一是允许存储大量数据供脱机使用。(要了解有关每个浏览器可以拥有多少存储空间的更多信息,请参阅存储空间限制。)

显然,浏览器不想让某些广告网络或恶意网站污染您的计算机,因此浏览器会在任何给定的Web应用程序首次尝试打开IndexedDB进行存储时提示用户。用户可以选择允许或拒绝访问。

但是,在我的本地主机上进行测试时,Firefox和Google Chrome均未要求我提供许可。并且数据库已成功创建(似乎)。

那么,那篇文章过时了吗?还是因为我正在本地主机上进行测试?还是我想念的其他东西?

亲切的问候

javascript indexeddb

4
推荐指数
1
解决办法
1600
查看次数

类型设置为 JSON 时如何检查 AJAX 响应字符串

我正在使用 ajax 从网页中获取 JSON 数据。所以我已经设置responseTypejson. 如果网页成功处理数据,它会返回一个有效的 JSON 字符串,这很好。

但是如果网页失败,它会返回一个包含错误信息的 JSON 字符串,(抱歉误会),它返回一个错误字符串,而不是 json 字符串,因此 JavaScript 不会将其识别为有效的 JSON 字符串。所以如果我检查response,它是空的。在这种情况下,我想查看响应字符串并检查错误消息是什么。

var xhr = new XMLHttpRequest();
xhr.responseType = "json";
xhr.open("POST", "/someEndpoint");
xhr.send();
xhr.onload = function() {
    console.log(xhr.response);
}
Run Code Online (Sandbox Code Playgroud)

小提琴重现问题。)

如果/someEndpoint返回有效的 JSON,xhr.response则为 JavaScript 对象。但是,如果它不是有效的 JSON(当端点响应错误消息时),那么我会在xhr.response. 我无法访问 invalid-JSON 错误响应,因为访问xhr.responseText给出了错误:

未捕获的 DOMException:无法从“XMLHttpRequest”读取“responseText”属性:仅当对象的“responseType”为“”或“text”(为“json”)时,才能访问该值

使用 运行请求后,我不知道如何读取原始 HTTP 响应responseType="json",因为responseText无法访问。

javascript ajax json

3
推荐指数
1
解决办法
2万
查看次数

Inline-flex在Google Chrome中不起作用

看到这个codepen:https ://codepen.io/anon/pen/jBjZGx

在Firefox中:在此处输入图片说明

然后在Chrome中: 在此处输入图片说明

我不知道是什么原因造成的。我尝试删除垂直标题,但空白区域仍然存在。

这是代码:

section{
  width: 1000px;
  height: 200px;
  white-space: nowrap;
  background: yellow;
  border: 1px solid green;
  overflow-x: auto;
  overflow-y: hidden;
  z-index: 1;
}
a{
  display: inline-flex;
  min-width: calc(2 * 1cm);
  width:100%;
  height:100%;
  overflow: hidden;
  border-left: .2rem solid #282323;
  border-right: .2rem solid #282323;
  box-sizing: border-box;
  color: currentcolor;
  position: relative;
  scroll-snap-align: center none;
  text-decoration: none;
  transition: box-shadow .5s,transform 1s;
}
a:first-child{
  background: red;
  justify-content: flex-end;
}
a:last-child{
  background: orange;
}
.flex{
  display: flex;
  flex-direction: column;
}
Run Code Online (Sandbox Code Playgroud)
<section>
  <a> …
Run Code Online (Sandbox Code Playgroud)

html css google-chrome css3 flexbox

3
推荐指数
1
解决办法
1554
查看次数