我有一个旧网站,使用的是过去十年的旧 Google Analytics(分析)代码,我需要使用新 GA4 的帮助。
要将自定义事件和综合浏览量发送到 Google,我将使用ga()
其<script>
代码片段中的全局函数:
// Event
ga('send', 'event', {
eventAction: 'click',
eventCategory: 'social',
eventLabel: 'twitter'
});
// Pageview
ga('send', {
hitType: 'pageview',
page: 'Video page',
title: 'Intro video'
});
Run Code Online (Sandbox Code Playgroud)
Google Analytics 表示所有旧属性将于 2023 年 7 月 1 日停止工作,因此我们需要切换到新的 Google Analytics 4 属性,<script>
标头中的代码段发生了一些变化,现在它创建gtag()
:
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=X-XXX123456"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date()); …
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个函数,它接受一个数字并将其从最小和最大边界之间的0 - 1标准化.例如:
如果我想将值10标准化为5到15之间,我称之为:
val = 10; normalize(val, 5, 15);
返回0.5
将值0标准化为-10到5之间
val = 0; normalize(val, -10, 5);
返回0.666
这是我提出的功能:
function normalize(val, min, max){
// Shift to positive to avoid issues when crossing the 0 line
if(min < 0){
max += 0 - min;
val += 0 - min;
min = 0;
}
// Shift values from 0 - max
val = val - min;
max = max - min;
return Math.max(0, Math.min(1, val / max));
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:这是规范化一维值的最有效方法吗?我将以每帧60fps的速度调用此函数几千次,因此我希望尽可能优化它以减少计算负担.我已经找到了归一化公式,但我找到的只是二维或三维解.
我正在尝试使用<ol>
并<li>
创建一个有序的烹饪方向列表.但是,我需要在每次自动计算之前添加文本"Step",使其如下所示:
<ol>
<li>Place bag in freezer, etc...</li>
<li>Preheat oven</li>
</ol>
Run Code Online (Sandbox Code Playgroud)
步骤1.将袋子放入冰箱等......
步骤2.预热烤箱
我尝试:before
在CSS中使用选择器,但它将自定义文本"Step"放在自动计算和内容之间.这是我的CSS:
li:before{
content: "Step ";
font-weight: bold;
}
Run Code Online (Sandbox Code Playgroud)
这就是结果
1.将袋放入冰箱等处...
2.步骤预热烤箱
有没有办法修改默认行为,以便自动列出"步骤1","步骤2"等?
我有以下幻灯片:0 1 2 3 4
我希望旋转木马从3变为0,同时看起来像是向前滑动到0,而不是'后退'到0;
这将从"3"滑回"0":
$("#my-carousel").carousel(slideNum);
Run Code Online (Sandbox Code Playgroud)
我可以通过使用强制方向next
,但它将显示从3到4,我不想要:
$("#my-carousel").carousel('next');
Run Code Online (Sandbox Code Playgroud)
通过强制你想要它滑动的方向,可以从3变为0吗?我正在寻找类似的东西:
$("#my-carousel").carousel(slideNum, direction);
Run Code Online (Sandbox Code Playgroud) 您好,我想知道 safari 的 viewport-fit=cover 是否有解决方法或等效方法将网站扩展到 iPhone 缺口之外,但适用于 Chrome。
<meta name="viewport" content="user-scalable=no, initial-scale=1, minimum-scale=1.0, width=device-width" viewport-fit=cover/>
我读过并尝试过的所有内容似乎都证实,包括 viewport-fit=cover 在内,在 Chrome iOS 上不起作用。
这是我找到的资源页面:https ://webkit.org/blog/7929/designing-websites-for-iphone-x/
我正在制作一个网页,其中包含用于 3D 模型的 Three.js 渲染的单个画布,并且希望整个场景覆盖该页面。
我使用的是 Three.js r97 和 Angular 7。
我可以在本地运行和提供应用程序(按原样工作),但我无法为具有类型错误的生产构建。
错误 TS2339:类型“Object3D”上不存在属性“isMesh”。
错误 TS2339:“Object3D”类型上不存在“材料”属性。
错误 TS2339:类型“Object3D”上不存在属性“几何”。
发生这种情况的地方是在加载对象之后我正在遍历零件。
child.isMesh
并且对子对象所做的修改会引发错误。
我是打字稿的新手,不确定是否有更好的方法来处理这些操作。据我所知,我无法强制进行生产构建。任何有助于解决此问题的建议将不胜感激。
this.loader = new THREE.FBXLoader();
this.loader.load('assets/models/C4D_Export.fbx', object => {
object.traverse( child => {
if( child.type == "Group"){
child.name = 'ToolGroup';
}
if ( child.isMesh ) {
const oldMat = child.material;
//CONVERT MATERIAL TO STANDARD MATERIAL.
child.material = new THREE.MeshStandardMaterial({
color: oldMat.color,
map: oldMat.map,
});
child.castShadow = true;
child.receiveShadow = true;
child.material.combine = THREE.MixOperation;
child.material.envMap = envMap;
child.material.shininess=10;
child.material.refractionRatio=1;
child.material.reflectivity=1;
//child.material.normalMap = texture;
//child.material.normalMapType = …
Run Code Online (Sandbox Code Playgroud) 每当我在 THREE.js 中编写自定义着色器并且犯了错误时,控制台都会输出一条带有编译后的 GLSL 代码的漂亮错误消息。它包括我的代码以及 Three.js 自动添加的所有额外行:
问题:
有什么方法可以输出内置材料的编译后vertexShader
和内容吗?fragmentShader
我THREE.MeshLambertMaterial
在我的项目中使用,我想阅读编译后的 GLSL 代码以了解它是如何在幕后运行的。我知道我可以转到库的\src\renderers\shaders\ShaderLib\meshlambert_frag.glsl但它有几十#include
行,并且没有 THREE.js 自动附加的所有额外属性/制服。
我尝试在第一次渲染后 console.log 材质的属性,但找不到编译后的 GLSL 代码:
var firstRender = true;
function update(){
renderer.render(scene, camera);
if(firstRender === true){
// Where in myMaterial is the GLSL code stored?
console.log(myMaterial.program.vertexShader);
firstRender = false;
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个简单的应用程序,使用BrowserRouter
'react-router-dom'v4.我试图location.pathname
从<BrowserRouter/>
组件内访问该属性,但无济于事:
class App extends Component{
render(){
return (
<BrowserRouter>
// How do I access this.props.location?
<div className={(this.props.location.pathnme === "/account") ? "bgnd-black" : "bgnd-white"} >
<Switch>
<Route path="/login" component={LoginPage}/>
<Route path="/success" component={LoginSuccess}/>
<Route path="/account" component={MyAccount}/>
...
<Route component={Error404}/>
</Switch>
</div>
</BrowserRouter>
);
}
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过子组件访问应用程序的当前路径位置this.props.location.pathname
,但我需要从父组件访问它,就在下面<BrowserRouter/>
,运行与子组件无关的其他逻辑.我怎样才能获得这个位置?
如果我想跟踪一个更新非常频繁的变量,我可以这样做console.log(myVar);
,它会在控制台底部添加一行:
有没有办法替换最后一行的值,而不是在底部附加新行?
这将非常有帮助,因为这样我就可以查看以前的日志,而无需将它们滚动到顶部视图之外。
我尝试过以下方法:
console.clear();
console.log(myObject);
console.log(myVar);
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为重新记录对象会折叠它们,而且它在 Chrome 中闪烁太多。我在控制台上阅读了 MDN 文档,尽管它有很多简洁的功能,但我不知道如何重写一行。我已经看到它是在终端/命令提示符中完成的,浏览器控制台是否具有该功能?
JavaScript在由Number.MAX_SAFE_INTEGER
. 任何超出此范围的数字都有不准确的风险。这是因为如本答案所述,由于位移动,它无法在内存中准确表示:
var max = Number.MAX_SAFE_INTEGER;
max + 0; // 9,007,199,254,740,991
max + 1; // 9,007,199,254,740,992
max + 2; // 9,007,199,254,740,992 (!)
max + 3; // 9,007,199,254,740,994
max + 4; // 9,007,199,254,740,996 (!)
// ...
Run Code Online (Sandbox Code Playgroud)
您在上面得到的任何结果max
都非常不可靠,使其几乎完全无用,并且如果开发人员没有预料到或意识到此限制,则很容易导致错误。
我的问题是,超过这个值的数字有什么意义?JavaScript 是否有任何实际用途来允许Number
超出此范围?它可以达到Number.MAX_VALUE
(1.79e+308),大大大于MAX_SAFE_INTEGER
,但是这两个值之间的所有内容都不是很有用,它迫使开发人员切换到BigInt
。
javascript ×7
css ×2
three.js ×2
chrome-ios ×1
console.log ×1
debugging ×1
glsl ×1
html ×1
jquery ×1
math ×1
performance ×1
reactjs ×1
typescript ×1
viewport ×1
webgl ×1