欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

jQuery尺寸.位置宽度

程序员文章站 2024-03-20 14:04:10
...

jQuery尺寸.位置宽度

1.1jQuery尺寸

语法 用法
width() 获取元素的宽高
innerWidth()/innerHieght() 获取元素的宽高 包括padding
outerWidth()/outerHieght() 获取元素的宽高 包括padding border
outerWidth(true)/outerHieght(true) 获取元素的宽高 包括padding border margin

以上参数为空,则是获取响应值,返回的是数字型
如果参数为数字,则是修改相应值
参数可以不必写单位

<style>
	div{
		width:200px;
		height:200px;
		background-color:pink;
		padding:100px;
		border:15px solid red;
		margin:20px;	
	}
</style>
<body>
	<div></div>
	<script>	
		$(function(){
			//1.width()  height()获取设置元素 width和height大小
			console.log($("div").width());
			//2.innerWidth()  /innerHeight()  获取设置元素 width和height + padding大小
			console.log($("div").innerwidth());
			//3.outerWidth() /outerWidth()  获取设置元素 width和height + padding +border大小
			console.log($("div").outerwidth());
			//4.outerWidth(true) /outerWidth(true)  获取设置元素 width和height + padding + border+ margin大小
			console.log($("div").outerwidth(true));
		})	
	</script>
</body>

1.2jQuery位置

位置主要有三个:offset().position().scrollTop()/scrollLeft()

  1. offset()设置或获取元素偏移
  • offset()设置或返回元素被选元素相对于文档的偏移坐标,跟父级没有关系
  • 该方法有两个属性left,top; offset().top用于获取距离文档顶部的距离;offset().left用于获取距离文档左侧的距离
  • 可以设置元素的偏移:offset({top:10,left:30})
  1. position()获取元素偏移
  • position()方法获取距离带有定位的父级(带有父级)的相对位置
  • 这个方法只能获取,不能设置
  1. scrollTop()/scrollLeft设置获取元素被卷去的头部和左侧
  • scrollTop()方法设置或返回被选元素被卷去的头部
<style>
.father{
	width:400px;
	height:400px;
	background-color:pink;
	margin:100px;
	overflow:hidden;
	position:relation;
}
.son{
	width:150px;
	height:150px;
	background-color:purple;
	position:absolute;
	top:10px;
}
</style>
<div class="father">
	<div class="son"></div>
</div>
<script>
$(function(){	
	//1.offset   获取元素距离文档的位置(偏移量)
	consoloe.log($(".son").offset());  //返回值是一个对象
	consoloe.log($(".son").offset().top);
	$( )
	//2. position	获取距离带有定位的父级位置	如果没有带有定位的父级,则以文档为准
	consoloe.log($(".son").position());
	//3.被卷去的头部scrollTop()
	$(window).scroll(function(){
		console.log($(document).scrollTop());
	});
	var boxTop = $(".box").offset().top;
	//文档返回顶部
	$(window).scroll(function(){
		if($(document).scrollTop() >= boxTop){
			//$(".back").show();
			$(".back").fadeIn();
		}else{
			$(".back").fadeOut();
		}
	});
	//页面加载直接跳到某个位置
	$(document).scrollTop(100);
	$(".back").click(function(){
		//$(document).scrollTop(0);
		$("body,html").stop().animate({
			scrollTop:0	
		});
	})
	
})
</script>

返回顶部案例优化–animate
animate动画函数里面有scrollTop属性,可以设置位置
但是是文档不能做动画,元素才能做动画,因此$(“body,html”).animate(scrollTop:0)

1.3案例:品优购电梯导航

当页面滚动到今日推荐模块,就让电梯导航显示出来
点击电梯导航相应内容,页面可以滚动到相应内容区域
因为电梯导航页面模块和内容区模块一以对应
当我们点击电梯导航某个小模块,就可以拿到当前小模块的索引号
就可以吧animate要移动的距离求出来:当前索引好内容区域模块他的offset().Top

<style>
	.fixedtool{
		position:fixed;
		top:100px;
		left:50%;
		margin-left:-676px;
		width:66px;
		background-color:#fff;
		display:none;
	}
	.fixedtool{
		height:32px;
		line-height:32px;
		text-align:center;
		font-size:12px;
	}


</style>
//电梯导航模块
<div class="fixedtool">
	<ul>
		<li class="current">家用电器</li>
		<li>手机通讯</li>
		<li>电脑办公</li>
		<li>精品家具</li>
		
	</ul>
</div>
<div class="floor">
	<div class="jiayong w"></div>
	<div class="shouji w"></div>
	<div class="diannao w"></div>
	<div class="jingpin w"></div>
</div>

<script scr="js/jQuery.min.js"></script>
<script>
	//1.显示电梯导航
	//【1.4案例优化】节流阀  互斥锁
	var flag  = true; 
	$(function(){
	var toolTop = $(".recommend").offset().top;
	toggleTool();
	//封装一个函数,当页面在某个位置刷新的时候也能出现电梯导航 
	function toggleTool(){
		if($(document).scrollTop() >= toolTop){
				$(".fixedtool").fadeIn();	
			}else{
					$(".fixedtool").fadeOut();
			};
	}
	$(window).scroll(function(){
		toggleTool();
		//互斥锁
		if(flag){
			//【1.4案例】3.页面滚动到某个内容区域,左侧电梯导航小li相应添加和删除current类名
			$(".floor .w").each(function(i,ele){
				if($(document).scrollTop() >= $(ele).offset().top){	
				$(".fixedtool li").eq(i).addClass("current").siblings().removeClass();	
				}	
			})
		}
	
			
	});
	//【1.3案例】2.点击电梯导航页面可以滚动到相应内容区域
	$(".fixedtool li").click(function(){
		//互斥锁
		flag = false;
		console.log($(this).index());
		//当我们每次点击小li 就需要计算出页面要去往的位置
		//选出对应索引号的内容区的盒子  计算他的.offset().top()
		var current = $(".floor .w").eq($(this).index()).offset().top;
		//页面动画滚动效果
		//滚动之后执行回调函数,把互斥锁打开
		$("body ,html").stop().animate({
			scrollTop:current;	
		},function(){
			flag = true;	
		});
		//点击之后,让当前的小li  添加current  类名,姐妹移除current类名
		//current类名是电梯导航的红色定位背景
		$(this).addClass("current").siblings().removeClass()
	})
})
</script>

1.4案例:品优购电梯导航

  • 当我们点击电梯某个li,当前小li添加current类,兄弟移除类名
  • 当页面滚动到内容区域模块,左侧电梯导航,相对应的小li模块,也会添加current类,兄弟移除current类
  • 触发的事件是页面滚动,因此这个功能要写到页面滚动事件里面
  • 需要用到each,遍历内容区域大模块。each里面能拿到内容区域每一个模块元素和索引号
  • 判断条件:被卷去的头部大于等于内容区域里面每个模块的offset().top

1.4案例优化
当我们点击电梯小li ,会发生页面滚动,页面滚动触发$(window).scroll(function(){}函数,该函数会进行一个给电梯导航小li添加current类名方法
解决:当我们点击小li时不需要执行页面滚动事件里面的给电梯导航添加current类名

节流阀:互斥锁