网页特效

网页特效的一些常用的标签

offset & style

在这里插入图片描述

如果只想要获取元素的大小位置,用offset;如果想要给元素更改值,则style更合适

京东鼠标移动图片放大案例

			var box = document.querySelector('#box');
			box.addEventListener('mousemove',function(e){
				var x = e.pageX - this.offsetLeft;
				var y = e.pageY - this.offsetTop;
				this.innerHTML = 'x的坐标是' + x +'y的坐标是' + y;
			})

鼠标的坐标减去盒子距离页面的距离,就是鼠标在盒子的位置

鼠标移动登录框案例

1、当鼠标按下时候,获得鼠标在盒子内的坐标位置

2、移动鼠标时,鼠标到页面的距离 减去 鼠标到盒子边框的距离,就是盒子离窗口的距离

3、鼠标弹起时候,自动溢出移动事件。

client

clientTop/Left

翻译过来客户端,返回元素上边框、左边框

clientWidth/Height(记这个)

返回包括自身padding 、内容区宽度/高度,不包含边框,返回的值不带单位

在这里插入图片描述

立刻执行函数

不需要调用就可以立刻执行函数

好处:独立创建了一个作用与,所有变量都是局部变量,不会有命名冲突

(function() {})() 或者 (function(){}())

(function(){
	console.log('1')		//不需要调用就可以可以执行
})()	//括号里面可以带形参或者实参

mouseover & mouseenter

mouseenter只有经过自身的子盒子才会触发【不冒泡】同样 mouseleave(鼠标离开)同样也不会冒泡

mouseover 经过父盒子也会触发,因为会产生事件冒泡

动画原理

通过计时器不断移动盒子的位置

1、获得当前盒子的位置

2、让盒子在房前的位置加上1 个移动距离

3、利用定时器不断重复操作

4、加上一个结束器条件

5、元素添加定位才能使用 element.style.left

		<style type="text/css">
			#box{
				height: 200px;
				width: 200px;
				background-color: #00FFFF;
				position: absolute;	   /* 动画一定要加定位,否则不生效 */
			}
		</style>
		<div id="box"></div>
		<script type="text/javascript">
			function animate(obj,target){		//传入两个参数  所以要移动的元素   +   移动的距离
                clearInterval(obj.timer);//清除以前的定时器,只保留当前的定时器
				var timer = setInterval(function(){	//设置定时器
					if(obj.offsetLeft >= target){	//
						clearInterval(timer);	//如果刚好到达就清除定时机器
					}else{
						obj.style.left = obj.offsetLeft + 1 +'px';	//每次加1单位
					}
				},1);
			}
			var div = document.querySelector('#box');
			animate(div,300);
		</script>
提高效率的写法

var timer = setInterval(function(){})

上面一条语句中,每一次调用函数都要开辟一个定时器,因此占用内存

所以我直接给对象添加一个定时器

obj.timer = setInterval(function(){})

所产生的效果一样

缓动动画【重点】

核心算法:(目标值-当前的位置)/10 作为每次移动的不长啊

		<style type="text/css">
			#box{
				height: 200px;
				width: 200px;
				background-color: #00FFFF;
				position: absolute;	   /* 动画一定要加定位,否则不生效 */
			}
		</style>
		<button type="button" id="btn1">前进500</button>
		<button type="button" id="btn2">前进800</button>
		<div id="box"></div>
		<script type="text/javascript">
			//callback  回调函数作为传入的参数
			function animate(obj,target,callback){		//传入两个参数  所以要移动的元素   +   移动的距离
				obj.timer = setInterval(function(){	//设置定时器
				//步长值的核心算法写到定时器里面
				//把步长值改为整数,不要出现小数的问题
				
					var step = (target - obj.offsetLeft) / 10;
					//math.ceil函数是  小数向上取整,要前进,不要后退
					//如果是后退的负值时候,就往小取整
					step = step > 0 ? Math.ceil(step) : Math.floor(step);	//重点理解
					if(obj.offsetLeft == target){	//当步长值等于移动距离时候  执行  如果大于的话可以后退  精妙之处
						clearInterval(obj.timer);	//如果刚好到达就清除定时机器
						//定时器结束时 调用 回调函数callback
						if(callback){
							callback();
						}
					}else{
						obj.style.left = obj.offsetLeft + step +'px';	//每次加1单位
						
					}
				},15);
			}
			var div = document.querySelector('#box');
			
			var btn1 = document.querySelector('#btn1');
			var btn2 = document.querySelector('#btn2');
			btn1.addEventListener('click',function(){
				animate(div,500,function(){
					console.log("到500拉");
				});
			});
			btn2.addEventListener('click',function(){	//函数作为参数传进函数里面
				animate(div,800,function(){
					div.style.background = 'red';
				});
			});
		</script>

轮播图

自动轮播

增加一个定时器,然后通过调用,手动调用事件。

var timer = setInterval(function(){
	element(函数).click();		//就可以实现手动调用事件。
},2000);   		//每2秒调用一次
节流阀

目的:上一个动画播放完毕后才执行下一个动画的播放

开始设置一个变量 var flag = true;

if(flag){flag = false;do something} //关闭水龙头

nction(){
element(函数).click(); //就可以实现手动调用事件。
},2000); //每2秒调用一次




##### 节流阀

目的:上一个动画播放完毕后才执行下一个动画的播放

> 开始设置一个变量  var flag = true;
>
> if(flag){flag = false;do something}  //关闭水龙头
>
> 利用回调函数 动画执行完毕时 , flag=true  打开水龙头
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值