成果展示:
codepen链接:https://codepen.io/ashipiling/pen/poedxQV 该网站实现了demo,可进行拖拽尝试和代码修改。

图1 不同页面宽度下,sidebar关闭与开始情况演示。
左图:页面宽度约为600px,sidebar打开时右侧全局向右平移。
右图:页面宽度约为1000px,sidebar打开时右侧宽度减少。
拟解决问题:
当页面宽度大于等于968px时:
1)sidebar默认处于打开状态,宽度为20%;
2)点击开关按钮,sidebar展开,右侧主页面宽度减少,但两者都正常显示;
3)再次点击开关按钮,sidebar关闭,右侧页面宽度恢复成100%;
4)
当页面宽度小于968px时:
1)sidebar默认处于关闭状态,打开后宽度为250px(为在小屏幕更好的显示);
2)点击开关按钮,sidebar展开,右侧主页面宽度不变,整体向右侧移动**;
3)再次点击开关按钮,sidebar关闭,右侧页面向左移动恢复正常;
4)点击sidebar上的页面切换按钮后,右侧页面内容切换,sidebar自动关闭。
实现思路:
a) position:absolute固定sidebar和右侧部分的基础布局;
b) media(max-width)设置自动关闭和打开的功能;
c) 按钮函数逻辑:{
页面宽度 = 获取页面宽度;
sidebar宽度 = 获取sidebar宽度;
if sidebar宽度大于0 并且leftbar.left等于0(进入关闭函数分支):
sidebar.left = 负的sidebar宽度;
右侧页面.width = 100%,右侧页面.left = 0;
else if leftbar.left小于0或者leftbar.width等于0(进入打开函数分支):
if 页面宽度大于等于968px:
sidebar.left = 20%;
右侧页面.width = 100% - 20%;
右侧页面.left = 20%;
else :
sidebar.left = 250px;
右侧页面.left = 250px;
}
实现细节:
html&css代码
<!DOCTYPE html>
javascript代码**
//left_width: 正常情况下leftbar宽度,此处传入20%
//min_width:小页面情况下leftbar宽度,此处传入250px
//media_width:968px
function openclose_sidebar(left_width, min_width, media_width) {
var leftbar = document.getElementById(“leftbar”);
var mainpage = document.getElementById(“mainpage”);
var leftwidth_current = leftbar.clientWidth; //获取sidebar宽度
var leftbar_left = Number(leftbar.style.left.replace(/px/g, “”)); //获取sidebar的left属性值
var document_width = document.body.clientWidth; //获取页面宽度
if (leftbar_left === 0 && leftwidth_current > 0) { //sidebar宽度大于0 并且leftbar.left等于0(进入关闭函数分支) <br /> leftbar.style.left = "-" + leftwidth_current + "px"; //sidebar.left = 负的sidebar宽度;<br /> mainpage.style.width = "100%"; //右侧页面.width = 100%<br /> mainpage.style.left = 0; //右侧页面.left = 0;<br /> } else if (leftbar_left < 0 || leftwidth_current === 0) { //leftbar.left小于0或者leftbar.width等于0(进入打开函数分支)<br /> leftbar.style.left = "0";<br /> if (document_width >= media_width) {<br /> leftbar.style.width = left_width;<br /> mainpage.style.width = "calc(100% - " + left_width + ")"; //由于传入的为20%的字符串,此处直接用calc函数计算<br /> mainpage.style.left = left_width;<br /> } else {<br /> leftbar.style.width = min_width;<br /> mainpage.style.left = min_width; //页面小于968时,右侧页面的left都直接等于250px,整体往右推<br /> }<br /> }<br />}
