思路
- 媒体查询:利用CSS的媒体查询特性,根据不同的屏幕尺寸定义不同的样式。
- Svelte响应式变量:在Svelte组件中创建响应式变量来跟踪当前屏幕尺寸,根据该变量值切换组件的布局和样式。
- 节流与防抖:为了避免频繁触发窗口大小改变事件导致性能问题,使用节流(throttle)或防抖(debounce)技术。
关键代码片段
- 创建响应式变量:
<script>
let windowWidth = window.innerWidth;
const handleResize = () => {
windowWidth = window.innerWidth;
};
window.addEventListener('resize', handleResize);
$: isMobile = windowWidth < 768; // 假设768px为移动端和桌面端的分界点
$: onDestroy(() => {
window.removeEventListener('resize', handleResize);
});
</script>
- 根据响应式变量切换样式:
<style>
.desktop - layout {
display: flex;
justify - content: space - between;
}
.mobile - layout {
display: block;
}
</style>
{#if isMobile}
<div class="mobile - layout">
<!-- 移动端布局内容 -->
</div>
{:else}
<div class="desktop - layout">
<!-- 桌面端布局内容 -->
</div>
{/if}
- 使用防抖优化事件处理(可选用lodash的debounce):
<script>
import {debounce} from 'lodash';
let windowWidth = window.innerWidth;
const handleResize = () => {
windowWidth = window.innerWidth;
};
const debouncedHandleResize = debounce(handleResize, 200);
window.addEventListener('resize', debouncedHandleResize);
$: isMobile = windowWidth < 768;
$: onDestroy(() => {
window.removeEventListener('resize', debouncedHandleResize);
debouncedHandleResize.cancel();
});
</script>