在 jQuery 中,可以使用 $(window).resize()
方法来监听浏览器窗口大小变化的事件。当用户调整浏览器窗口大小时,绑定的回调函数会被触发。
URL 参数(查询字符串)是 URL 中 ?
后面的部分,格式为 key=value
,多个参数用 &
连接。通过 JavaScript 可以读取、添加和删除这些参数。
$(document).ready(function() {
// 定义一个函数来处理URL参数
function updateUrlParam(param, value) {
var url = window.location.href;
var urlObj = new URL(url);
var params = new URLSearchParams(urlObj.search);
if (value === null || value === undefined) {
// 删除参数
params.delete(param);
} else {
// 添加或更新参数
params.set(param, value);
}
// 更新URL(不刷新页面)
window.history.replaceState({}, '', urlObj.pathname + '?' + params.toString());
}
// 定义一个防抖函数,避免频繁触发
function debounce(func, wait) {
var timeout;
return function() {
clearTimeout(timeout);
timeout = setTimeout(func, wait);
};
}
// 窗口大小变化处理函数
function handleResize() {
var windowWidth = $(window).width();
// 根据窗口宽度添加或删除参数
if (windowWidth < 768) {
updateUrlParam('mobile', 'true');
} else {
updateUrlParam('mobile', null);
}
}
// 使用防抖函数包装处理函数,设置300毫秒的延迟
var debouncedHandleResize = debounce(handleResize, 300);
// 绑定窗口大小变化事件
$(window).resize(debouncedHandleResize);
// 初始调用一次
handleResize();
});
history.replaceState
不会导致页面刷新,用户体验更好原因:窗口调整过程中会连续触发resize事件 解决:使用防抖(debounce)技术,如上例所示
原因:直接修改 window.location.href
会导致页面刷新
解决:使用 history.replaceState
方法更新URL而不刷新页面
原因:没有正确处理参数的存在性
解决:使用 URLSearchParams
API 来规范操作URL参数
原因:设备旋转会触发resize事件,但可能不需要更新URL 解决:可以添加更复杂的判断逻辑,如检测方向变化而非单纯宽度变化
function handleResize() {
var windowWidth = $(window).width();
var windowHeight = $(window).height();
updateUrlParam('width', windowWidth);
updateUrlParam('height', windowHeight);
if (windowWidth < 768) {
updateUrlParam('layout', 'mobile');
} else if (windowWidth < 1024) {
updateUrlParam('layout', 'tablet');
} else {
updateUrlParam('layout', 'desktop');
}
}
function applyUrlParams() {
var urlObj = new URL(window.location.href);
var params = new URLSearchParams(urlObj.search);
if (params.has('mobile') && params.get('mobile') === 'true') {
// 应用移动端样式或逻辑
$('body').addClass('mobile-view');
}
}
// 在文档加载完成后调用
$(document).ready(applyUrlParams);
通过以上方法,您可以有效地在jQuery中实现窗口大小变化时动态更新URL参数的功能,同时避免常见问题。
没有搜到相关的文章