在 Svelte 中导入工作 javascript 文件
Import a working javascript file in Svelte
我正在 Svelte 中构建一个应用程序,我正在尝试向其中添加一个以前编写的 .js
文件。我尝试将其导入 main.js
文件,但出现错误: Cannot read properties of null (reading 'offsetHeight')
This is the .js
file:
[...]
function colorSubheadings() {
// Replace subheading background colors
var redStart = 255;
var greenStart = 255;
var blueStart = 255;
var redEnd = 249;
var greenEnd = 250;
var blueEnd = 251;
var redDiff = redEnd - redStart;
var greenDiff = greenEnd - greenStart;
var blueDiff = blueEnd - blueStart;
var page = document.querySelector('.page');
var pageHeight = page.offsetHeight;
var subheadings = document.getElementsByClassName('.chapter');
for (var i = 0; i < subheadings.length; i++) {
// Get the position relative to .page
var span = subheadings[i].querySelector('span');
var factor = span.offsetTop / pageHeight;
var r = Math.floor(redDiff * factor + redStart);
var g = Math.floor(greenDiff * factor + greenStart);
var b = Math.floor(blueDiff * factor + blueStart);
var color = 'rgb(' + r + ',' + g + ',' + b + ')';
// Color background based on position
span.style.backgroundColor = color;
span.style.boxShadow = '11px 0 0 ' + color + ', -13px 0 0 ' + color;
}
}
[...]
这是 .svelte
文件:
<script>
//some functions
</script>
<div class="page">
[...]
<div class="chapter-sidebar">
<div class="sidebar js-sidebar">
<div class="sidebar__wrapper">
<ul class="sidebar__list">
{#each files as { file } (file.name)}
<li class="sidebar__list-item">
<a class="sidebar__link" href="#temp">{file.name.split('.').slice(0, -1).join('.')}</a>
</li>
{/each}
</ul>
</div>
</div>
在 .svelte
文件中有一个横向导航栏,就像 this. In vanilla html it works perfectly, but with svelte there are some bugs, like the navBar doesn't "stick" in a place: if I scroll down it remains at the top of the page, insted of remain in a particuar position of the screen, "following" the user's scroll. So, what can i do to use this .js
file in my svelte project? I also tried 解决方案一样,但它对我不起作用。
提前致谢。
colorSubheadings()
函数在哪里调用?
(我在 Svelte 文件中看到 var subheadings = document.getElementsByClassName('.chapter')
但没有包含 class 'chapter' 的元素)
我建议你要么试试
- 在
yourproject/puplic
文件夹 中的 index.html
中导入 .js 文件 在 <script src="/build/bundle.js"></script>
之后(以防函数在相同 .js
个文件)
- 运行
.svelte
组件中 onMount 内的函数(.js
文件夹内的 yourproject/src
文件具有导出函数 export colorSubheadings() {...}
)
import {onMount} from 'svelte'
import {colorSubheadings} from './xy.js'
onMount(()=> {
colorSubheadings()
})
您需要在 js 文件中导出函数,然后才能将其导入 .svelte 文件(或其他 JS 文件)。
export function colorSubheadings() {
...
}
我正在 Svelte 中构建一个应用程序,我正在尝试向其中添加一个以前编写的 .js
文件。我尝试将其导入 main.js
文件,但出现错误: Cannot read properties of null (reading 'offsetHeight')
This is the .js
file:
[...]
function colorSubheadings() {
// Replace subheading background colors
var redStart = 255;
var greenStart = 255;
var blueStart = 255;
var redEnd = 249;
var greenEnd = 250;
var blueEnd = 251;
var redDiff = redEnd - redStart;
var greenDiff = greenEnd - greenStart;
var blueDiff = blueEnd - blueStart;
var page = document.querySelector('.page');
var pageHeight = page.offsetHeight;
var subheadings = document.getElementsByClassName('.chapter');
for (var i = 0; i < subheadings.length; i++) {
// Get the position relative to .page
var span = subheadings[i].querySelector('span');
var factor = span.offsetTop / pageHeight;
var r = Math.floor(redDiff * factor + redStart);
var g = Math.floor(greenDiff * factor + greenStart);
var b = Math.floor(blueDiff * factor + blueStart);
var color = 'rgb(' + r + ',' + g + ',' + b + ')';
// Color background based on position
span.style.backgroundColor = color;
span.style.boxShadow = '11px 0 0 ' + color + ', -13px 0 0 ' + color;
}
}
[...]
这是 .svelte
文件:
<script>
//some functions
</script>
<div class="page">
[...]
<div class="chapter-sidebar">
<div class="sidebar js-sidebar">
<div class="sidebar__wrapper">
<ul class="sidebar__list">
{#each files as { file } (file.name)}
<li class="sidebar__list-item">
<a class="sidebar__link" href="#temp">{file.name.split('.').slice(0, -1).join('.')}</a>
</li>
{/each}
</ul>
</div>
</div>
在 .svelte
文件中有一个横向导航栏,就像 this. In vanilla html it works perfectly, but with svelte there are some bugs, like the navBar doesn't "stick" in a place: if I scroll down it remains at the top of the page, insted of remain in a particuar position of the screen, "following" the user's scroll. So, what can i do to use this .js
file in my svelte project? I also tried
colorSubheadings()
函数在哪里调用?
(我在 Svelte 文件中看到 var subheadings = document.getElementsByClassName('.chapter')
但没有包含 class 'chapter' 的元素)
我建议你要么试试
- 在
yourproject/puplic
文件夹 中的index.html
中导入 .js 文件 在<script src="/build/bundle.js"></script>
之后(以防函数在相同.js
个文件) - 运行
.svelte
组件中 onMount 内的函数(.js
文件夹内的yourproject/src
文件具有导出函数export colorSubheadings() {...}
)
import {onMount} from 'svelte'
import {colorSubheadings} from './xy.js'
onMount(()=> {
colorSubheadings()
})
您需要在 js 文件中导出函数,然后才能将其导入 .svelte 文件(或其他 JS 文件)。
export function colorSubheadings() {
...
}