响应式侧边栏菜单
Responsiver Sidebar Menu
我是 jQuery 的新手,我想更改以下代码以满足我的需要:
$(document).ready(function() {
var slider_width = $('.pollSlider').width(); //get width automaticly
$('#pollSlider-button').click(function() {
if ($(this).css("margin-right") == slider_width + "px") {
$('.pollSlider,#pollSlider-button').animate({
"margin-right": '-=' + slider_width
});
} else {
if (!$(this).is(':animated')) //perevent double click to double margin
{
$('.pollSlider,#pollSlider-button').animate({
"margin-right": '+=' + slider_width
});
}
}
});
});
https://jsfiddle.net/3okensLj/1/
它运行良好,但当我将 window 调整到 500 像素以下时出现问题:
当我点击按钮 (?) 时,菜单出现。如果我关闭菜单并放大 window 菜单并且按钮消失了,我遇到了问题。我怎样才能避免这种情况?
我想更改代码,它根据 windows 大小向菜单容器添加一个新的 class,但保持按钮的功能。
抱歉,我不知道如何在不使用 js 的情况下以更好的方式修复您的代码 $(window).resize
将此添加到您的 js
var pollSlider = $("#sidebar");
$(window).resize(function(){
if ($(window).width() > 500) {
if (!pollSlider.hasClass("marginFixed")) {
$("#sidebar").addClass("marginFixed");
}
} else {
if (pollSlider.hasClass("marginFixed")) {
$("#sidebar").removeClass("marginFixed");
}
}
})
和css
.marginFixed {
margin-right: 0px !important;
}
你用 js 改变了你的风格,这是不好的,必须使用 !important 来覆盖这个
它可以工作,但它的错误代码
还有另一种方法使用 css 做到这一点
使用过渡
.pollSlider {
background: #fff none repeat scroll 0 0;
height: 100%;
line-height: 20pt;
position: fixed;
right: 0;
top: 0;
width: 450px;
margin-right: 0px;
-webkit-transition: margin-right 1s ease-in;
transition: margin-right 1s ease-in;
}
.pollSlider.slideAni {
margin-right: 0px;
}
js
$(document).ready(function () {
$('#pollSlider-button').click(function () {
$("#sidebar").toggleClass("slideAni");
});
});
或使用css关键帧动画
.pollSlider {
background: #fff none repeat scroll 0 0;
height: 100%;
line-height: 20pt;
position: fixed;
right: 0;
top: 0;
width: 450px;
margin-right: 0px;
-webkit-animation-duration: 1s;
animation-duration: 1s;
-webkit-animation-fill-mode: both;
animation-fill-mode: both;
}
.pollSlider.slideAni {
animation-name: slideAni;
}
@-webkit-keyframes slideAni {
from {
margin-right: -450px;
}
to {
margin-right: 0px;
}
}
@keyframes slideAni {
from {
margin-right: -450px;
}
to {
margin-right: 0px;
}
}
js
$(document).ready(function () {
$('#pollSlider-button').click(function () {
$("#sidebar").toggleClass("slideAni");
});
});
但是这样你必须添加其他动画class来动画回滑,我只是给你一个方法来尝试(我相信它会起作用)
我是 jQuery 的新手,我想更改以下代码以满足我的需要:
$(document).ready(function() {
var slider_width = $('.pollSlider').width(); //get width automaticly
$('#pollSlider-button').click(function() {
if ($(this).css("margin-right") == slider_width + "px") {
$('.pollSlider,#pollSlider-button').animate({
"margin-right": '-=' + slider_width
});
} else {
if (!$(this).is(':animated')) //perevent double click to double margin
{
$('.pollSlider,#pollSlider-button').animate({
"margin-right": '+=' + slider_width
});
}
}
});
});
https://jsfiddle.net/3okensLj/1/
它运行良好,但当我将 window 调整到 500 像素以下时出现问题:
当我点击按钮 (?) 时,菜单出现。如果我关闭菜单并放大 window 菜单并且按钮消失了,我遇到了问题。我怎样才能避免这种情况?
我想更改代码,它根据 windows 大小向菜单容器添加一个新的 class,但保持按钮的功能。
抱歉,我不知道如何在不使用 js 的情况下以更好的方式修复您的代码 $(window).resize
将此添加到您的 js
var pollSlider = $("#sidebar");
$(window).resize(function(){
if ($(window).width() > 500) {
if (!pollSlider.hasClass("marginFixed")) {
$("#sidebar").addClass("marginFixed");
}
} else {
if (pollSlider.hasClass("marginFixed")) {
$("#sidebar").removeClass("marginFixed");
}
}
})
和css
.marginFixed {
margin-right: 0px !important;
}
你用 js 改变了你的风格,这是不好的,必须使用 !important 来覆盖这个
它可以工作,但它的错误代码
还有另一种方法使用 css 做到这一点
使用过渡
.pollSlider {
background: #fff none repeat scroll 0 0;
height: 100%;
line-height: 20pt;
position: fixed;
right: 0;
top: 0;
width: 450px;
margin-right: 0px;
-webkit-transition: margin-right 1s ease-in;
transition: margin-right 1s ease-in;
}
.pollSlider.slideAni {
margin-right: 0px;
}
js
$(document).ready(function () {
$('#pollSlider-button').click(function () {
$("#sidebar").toggleClass("slideAni");
});
});
或使用css关键帧动画
.pollSlider {
background: #fff none repeat scroll 0 0;
height: 100%;
line-height: 20pt;
position: fixed;
right: 0;
top: 0;
width: 450px;
margin-right: 0px;
-webkit-animation-duration: 1s;
animation-duration: 1s;
-webkit-animation-fill-mode: both;
animation-fill-mode: both;
}
.pollSlider.slideAni {
animation-name: slideAni;
}
@-webkit-keyframes slideAni {
from {
margin-right: -450px;
}
to {
margin-right: 0px;
}
}
@keyframes slideAni {
from {
margin-right: -450px;
}
to {
margin-right: 0px;
}
}
js
$(document).ready(function () {
$('#pollSlider-button').click(function () {
$("#sidebar").toggleClass("slideAni");
});
});
但是这样你必须添加其他动画class来动画回滑,我只是给你一个方法来尝试(我相信它会起作用)