我正在an interface处理四个主要部分:
当浏览器窗口很窄时,还有一个向下滚动到“主”div的附加脚本。
<div id="container">
<div id="inner-container">
<div id="tag-selector">
<ul>
<li class="all">ALL PROJECTS</li>
<li class="graphic-design">graphic design</li>
<li class="logo-design">logo design</li>
<li class="photography">photography</li>
<li class="web-development">web development</li>
<li class="web-design">web design</li>
</ul>
</div>
<div id="main" role="main">
<p class="items">There are x items in this category</p>
<p class="selected">No category selected</p>
<p class="clicked">No category clicked</p>
<section class="graphic-design">
<p>graphic-design</p>
</section>
<section class="logo-design graphic-design">
<p>logo-design</p><p> graphic-design</p>
</section>
<section class="logo-design graphic-design"><p>etc</p>
</section>
</div>
<footer> </footer>
然后这是javascript。对不起,如果它有点长。我希望阅读它应该很容易。
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
$(document).ready(function(){
var xwidth =$(window).width();//get width of user window
all_projects_showing_text="All projects showing. There are " + n + " projects, in " + t + " categories.";
adjustStyle(xwidth);
$("p.items").text(all_projects_showing_text + " Width=" + xwidth);
$(".all").addClass("selected");
tag="all"
});
</script>
<script>
var n = $("section").length;//number of section boxes on page
var t = $("#tag-selector li").length;//categories
t--;
$("#tag-selector li").click(function() {//clicking section filter li
$("#tag-selector li").removeClass("selected");//removes all filtered class
$(this).addClass("selected");//then adds it to the chosen link (li), showing it as current
tag=$(this).attr("class");//var tag is the class name of the chosen link, i.e. category
var split = tag.split(' '); // this splits the class string and puts each item in an array
tag = split[0];//this chooses the first item of the array, hence not including the hilite class
var numItems = $('.'+tag).length
var numItems=numItems-1;//correct for real number
if (tag!="all"){//if the all link is not picked
$("section").hide();// hide all the boxes
$("#main ."+tag).fadeIn();//show all the boxes with the tag class
if(tag=="graphic-design"){
tag="Graphic design"
}
else if(tag=="logo-design"){
tag="Logo design"
}
else if(tag=="photography"){
tag="Photography"
}
else if(tag=="web-development"){
tag="Web development"
}
else if(tag=="web-design"){
tag="Web design"
}
$("p.items").text(numItems+" " +tag+ " projects");
$("p.selected").text(tag +" selected.");
$("p.clicked").text(tag +" selected.");
}
else{
$("section").fadeIn();//else show all the boxes
$("p.items").text(all_projects_showing_text);// all_projects_showing_text at onReady
}
});
</script>
<script>
$("#tag-selector li").hover(function () {
hovered_link=$(this).attr("class");//get the class of the category being hovered
var split = hovered_link.split(' '); // this returns an array
hovered_link = split[0];//remove any other classes apart from the first i.e. remove hilite
if (tag=="all"){// if All are shown
if(hovered_link!="all"){
$("section").not("."+hovered_link).addClass("section_darkened");//darken section which does not correspond with hovered category link
$("section").not(".section_darkened").addClass("outerglow");//add glow to not darkened sections
}
}
else{
}
if (tag==hovered_link){// if the projects are already filtered by this category, say so on hover
$("p.selected").text(tag +" already selected.");
}
else{
var numItems = $('.'+hovered_link).length
var numItems=numItems-1;//correct for real number
$("p.selected").text("Click to see only "+hovered_link+ " projects. (" +numItems+ " projects)" );
}
$(this).addClass("hilite");//hilite on hover over link
}, function () {
$(this).removeClass("hilite");
$("p.selected").text("...");
$("section").removeClass("section_darkened");//darken categories not in the selected category
$("section").removeClass("outerglow");//give the selected category items a glow
});
</script>
<script>
$(function() {
$(window).resize(function() {
adjustStyle($(this).width());
});
});
function adjustStyle(width) {
width = parseInt(width);
if (width < 600) {
$("#tag-selector li").click(function() {// SCroll function for handhelds
$('html,body').animate({
scrollTop: $("#main").offset().top},
'slow');
});
$("#size-stylesheet").attr("href", "css/nav-style-narrow.css");//style sheet for handhelds
} else if ((width >= 440)&&(width < 1040)){
$("#size-stylesheet").attr("href", "css/nav-style-med.css");
} else {
$("#size-stylesheet").attr("href", "css/nav-style-wide.css");
}
}
</script>
如果你已经走到这一步并看看了,谢谢!
所以我的问题是;
break;
吗?不太确定如何使用休息。提前感谢任何有目光的人。
答案 0 :(得分:1)
好的,我会咬人,虽然我不打算提供一份全面的清单:
有多种方法可以解决CSS flash问题。最简单的方法是隐藏所有内容,直到你加载了正确的样式表,然后在加载后显示所有内容。
是的,一般来说,将Javascript放在单独的文件中总是一个好主意 - 它只会让您更轻松地管理代码,特别是如果您想在多个页面上重复使用它们。
您遗漏了很多var
条款,例如为all_projects_showing_text
。这在语法上是正确的,但在Javascript中是一个坏主意,因为它使这些变量全局化,将它们附加到window
对象。如果您需要全局变量,您仍应使用var
声明它。
我没有看到break
适合,甚至可能的任何地方。您通常在break
或for
循环中使用while
来停止循环;我在代码中没有看到任何类似的循环。 JQuery代码经常使用.each()
,或者只是隐式地遍历选择中的所有项目;我很少在使用jQuery的代码中看到break
,尽管当然有可能是合适的。
缓存或链接jQuery选择器通常是一个好主意。例如,
$("section").removeClass("section_darkened");
$("section").removeClass("outerglow");
可能是
var $section = $section;
$section.removeClass("section_darkened");
$section.removeClass("outerglow");
或
$("section")
.removeClass("section_darkened")
.removeClass("outerglow");
或者甚至(在这种情况下,因为.removeClass()
可以一次删除几个类):
$("section")
.removeClass("section_darkened outerglow");
从else if
开始的if(tag=="graphic-design"){
部分可以更好地构建为地图+查找:
var tagTitles = {
"graphic-design":"Graphic design",
"logo-design":"Logo design",
// etc
};
tag = tagTitles[tag];
答案 1 :(得分:1)
关于break
:
break
停止执行当前循环或switch
。您应该在循环中使用它,以便在当前迭代结束之前停止循环,或者在循环语句本身未检查的条件下停止循环。您应该在case
块的switch
末尾使用它,以便不执行后续的case
。
在您的特定代码中,似乎没有任何循环或switch
es,因此任何地方都没有break
。
答案 2 :(得分:1)
break
不是函数。这是一个声明,所以你不要添加括号。var
,正如nrabinowitz已经提到的那样。缩进可以更好/更一致。