3. 窗口效果
window.html
<html> <head> <title>窗口效果</title> <meta http-equiv=”Content-Type” content=”text/html;charset=UTF-8”> <link type=”text/css” rel=”stylesheet” href=”css/window.css” /> <script type=”text/javascript” src=”js/jquery.js”></script> <script type=”text/javascript” src=”js/ window.js”></script> </head> <body> <input type="button" value="左下角显示窗口" id="leftpop" /> <input type="button" value="屏幕中间显示窗口" id="centerpop" /> <div class="window"> <div class="title" id="center"> <img alt="关闭" src="images/close.gif" /> 我是中间显示窗口的标题栏 </div> <div class="content"> 我是中间显示窗口的内容区 </div> </div> <div class="window" id="left"> <div class="title"> <img alt="关闭" src="image/close.gif" /> 我是左边显示窗口的标题栏 </div> <div class="content"> 我是左边显示窗口的内容区 </div> </div> <div class="window" id="right"> <div class="title"> <img alt="关闭" src="image/close.gif" /> 我是右边显示窗口的标题栏 </div> <div class="content"> 我是右边显示窗口的内容区 </div> </div> </body> </html>
window.css
.window { background-color: #D0DEF0; width: 250px; /*padding: 2px;*/ margin: 5px; position: absolute; /*控制窗口绝对定位*/ display:none; } .content { height: 150px; background-color: white; border: 2px solid #D0DEF0; padding: 2px; overflow: auto; /*可显示滚动条*/ } .title { padding:4px; font-size: 14px; } .title img { width: 16px; height: 16px; float: right; cursor: pointer; }
window.js
$(document).ready(function() { //1. 点击按钮可以在屏幕中间显示一个窗口 //2. 点击按钮2可以在屏幕的左下角显示一个窗口 var contentwin = $("#center").mywin({left: "center", top: "center"}); var leftwin = $("#left").mywin({left: "left", top: "bottom"}, function() { leftwin.slideUp("slow"); } ); $("#contentpop").click(function(){ //鼠标点击按钮之后,把id为center的窗口显示在页面中间 //计算位于屏幕中间的窗口的左边界和上边界的值 // 浏览器可视区域的宽和高,当前窗口的宽和高 contentwin.show("slow"); }); $("#leftpop").click(function() { leftwin.slideDown("slow"); } }); //position包含两个属性,一个是left,一个是top //hidefunc表示执行窗口隐藏的方法 $.fn.mywin = function(position, hidefunc) { if(position && position instanceof Object) { var positionleft = position.left; var positiontop = position.top; var windowobj = $(window); var browserwidth = $(window).width(); var browserheight = $(window).height(); var scrollLeft = $(window).scrollLeft(); var scrollTop = $(windwo).scrollTop(); var currentwin = this; var cwinwidth = currentwin.outerWidth(true); var cwinheight = currentwin.outerHeight(true); var left; var top; function calLeft(positionleft,scrollLeft,browsewidth,cwinwidth){ if(positionleft && typeof positionleft == "string") { if(positionleft == "center") { left = scrollLeft + (browserwidth – cwinwidth) /2; }else if (positionleft == "left") { left = scrollLeft; }else if (positionleft == "right") { left = scrollLeft + browserwidth – cwinwidth; }else { left = scrollLeft + (browserwidth – cwinwidth) /2; } }else if(positionleft && typeof positionleft == "number" ) { left = positionleft; }else { left = 0; } currentwin.data("positionleft",positionleft); } calLeft(positionleft,scrollLeft,browsewidth,cwinwidth) function calTop(positiontop,scrollTop,browseheight,cwinwidthheight) { if(positiontop && typeof positiontop == "string") { if(positiontop == "center") { top =scrollTop + (browserheight – cwinheight) / 2; }else if (positiontop == "top") { top = scrollTop; }else if (positiontop == "bottom") { top = scrollTop + browseheight – cwinheight; }else { top =scrollTop + (browserheight – cwinheight) / 2; } } else if(positionleft && typeof positiontop == "number" ) { top = positionleft; }else { top = 0; } currentwin.data("positiontop",positiontop); } calTop(positiontop,scrollTop,browseheight,cwinwidthheight); var scrollTimeout; $(window).scroll(function() { clearTimeout(scrollTimeout); scrollTimeout = setTimeout(function() { //延时处理 var browserwidth = $(window).width(); var browserheight = $(window).height(); var scrollLeft = $(window).scrollLeft(); var scrollTop = $(windwo).scrollTop(); calLeft(currentwin.data("positionleft"),scrollLeft,browsewidth,cwinwidth); calTp[(currentwin.data("positiontop"),scrollLeft,browsheight,cwinheight); currentwin.animate({ left: left, top: top; },300); },300); }); $(window).resize(function(){ var browserwidth = $(window).width(); var browserheight = $(window).height(); var scrollLeft = $(window).scrollLeft(); var scrollTop = $(windwo).scrollTop(); calLeft(currentwin.data("positionleft"),scrollLeft,browsewidth,cwinwidth); calTp[(currentwin.data("positiontop"),scrollLeft,browsheight,cwinheight); currentwin.animate({ left: left, top: top; },300); }); currentwin.css("left",left).css("top",top); currentwin.children(".title").children("img").click(function(){ if(!hidefunc) { currentwin.hide("slow"); }else { hidefunc(); } }); return currentwin; //返回当前对象,以便可以级联的执行其他方法 } }
知识宝典
1. 页面中模拟的窗口可以通过html的div标签来实现,窗口中的标题栏和内容区域可以再分别用一个div来表示
2. 让一组div看起来是窗口的样式,有很多种方法,比如可以设定整个窗口使用一种背景色,然后内容区域使用另一种背景色,并且给窗口一定的padding值(或者是内容区域设置边框),以达到内容区域和标题栏以后窗口外边的对比,从而看起来是窗口的效果
3. 正确理解float的效果,实际上会影响到后面的一个元素和float的元素之间的显示效果
4. overflow属性值为auto时,当内容区域很多超过了定义的高度或宽度时,就会显示滚动条
5. position属性值为absolute是,元素将在页面中绝对定位。如果祖先节点中有position:relative的定义,则相对于这个祖先节点的左上角进行定位
6. 浏览器可视区域的宽和高可以通过$(window).width() 和$(window).height()的方式获得
7. 浏览器滚动条的左边界和上边界可以通过$(window).scrollLeft()和$(window).scrollTop()来获得
8. 窗口定位到屏幕可视区域的正中间,需要用屏幕可视区域的宽减去窗口的宽,然后除2,在加上滚动条的左边界值,才能获得窗口需要的左边界值;上边界值也是同理的方法获得。
9. 插件的编写方法:$.fn.muplugin = function(){}, 方法中的this表示的是执行这个方法的jquery对象,注意方法应该在最后return this, 一保证其他jquery方法可以级联操作
10. instanceof可以用于判断一个变量是不是某个Js类的实例,比如判断是不是一个Object, 用法obj instanceof Obj
11. typeof可以用于判断一个变量的数据类型,比如typeof str == “string”
12. height()和width()方法获得的是元素本身的高和宽,innerHeight()和innerWidth()获得的是包括了padding的高和宽,outerHeight()和outerWidth()获得是包括了border和padding的高和宽,outerHeight(true)和outerWidth(true)获得是包括margin,border和padding的高和宽
13. scroll可以用于注册浏览器或某一节点的滚动条滚动所需要执行的操作
14. resize可以用于注册浏览器大小改变时所需要执行的操作
15. jquery提供的事件操作在注册的时候是增量的,比如有两段代码都是$(window).scroll(function(){}),第二段的function内容不会覆盖到第一段,而是在scroll时,两段代码都被执行
16. animate方法可以对left,top值进行一定时间内的变化,达到动画效果
17. dequene方法可以从动画队列的开头移除一个动画效果,并立即执行它。这样可以保证队列后面的动画不用等待开头的动画,也能执行。
18. is方法可以用来判断一个对象是否满足is方法参数中jquery选择器
19. :visible选择器可以用于获取页面中的可见元素
20. 浏览器间的差异导致在document.ready中的代码获得浏览器可视区域宽高已经滚动条left,top的值不一定都是正确的,因此我们需要保证在这个方法完成之后再来获得这些值。
21. $.browser可以用于判断浏览器的类型,判断方法可以是$.browser.msie == true, 可以使用的是包括$.browser.opera、$.browser.safari、$.browser.mozilla
22. $.browser.version可以判断浏览器的版本号,例如$.browser.version.indexOf(“8”)