前端入门小练习,JavaScript基础案例

前端入门小练习,JavaScript基础案例

今天分享三个适合前端新手入门,小白练习的几个案例

  1. 模仿电影院选座事件
  2. 京东放大镜效果
  3. 模态框拖拽事件

模仿电影院选座事件

<script>
        alert('欢迎来到My Lucky Cinema');
        var lis = document.querySelectorAll('li');
        for(var i = 0;i<lis.length;i++) {
            lis[i].addEventListener('click',function() {
            // this.style.backgroundColor = 'red';
            // 设置类名 
            var res = this.getAttribute('class');
            if(!res) {
                this.setAttribute('class','active'); 
                this.innerHTML = "座位已选";
            } else {
                // 清空类名
                this.setAttribute('class',''); 
                this.innerHTML = "";
            }
        })
        }
        
    </script>
 <style>
        * {
            margin: 0;
            padding: 0;
            list-style: none;
        }
        .clearfix::after {
            content: '';
            display: block;
            clear: both;
        }
        .box {
            width: 600px;
            border: solid rgb(211, 180, 180) 2px;
            margin: 50px auto;
        }
        ul li {
            width: calc(600px/6 - 15px);
            height: 50px;
            float: left;
            background-color: rgb(177, 163, 163);
            margin: 10px calc(90px/12);
            display: flex;
            justify-content: center;
            align-items: center;
        }
        .active {
            background-color: pink;
        }

        .central_screen {
            height: 60px;
            line-height: 60px;
            text-align: center;
            width: 330px;
            border: rgb(185, 175, 175) solid 2px;
            margin:40px auto 10px;
            font-size: 30px;
            font-weight: 800;
            color: thistle;
        }
    </style>
<div class="box">
        <ul class="clearfix">
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
        </ul>
        <div class="central_screen">中央屏幕</div>
    </div>

京东放大镜案例效果实现

基本的思路都在注释里了,这是一个比较经典的案例,在很多电商平台上都显眼可见。

<script>
		window.addEventListener('load', function () {
			var mask = document.querySelector('.mask');
			var big = document.querySelector('.big');
			var left = document.querySelector('.left');
			//1.当我们鼠标经过left 就显示和隐藏 mask遮挡层和 big大盒子
			left.addEventListener('mouseover', function () {
				mask.style.display = 'block';
				big.style.display = 'block';
			})
			left.addEventListener('mouseout', function () {
				mask.style.display = 'none';
				big.style.display = 'none';
			})
			//2.鼠标移动的时候 让黄色遮挡层跟着鼠标来走
			left.addEventListener('mouseover', function (e) {
				//(1).先计算鼠标在left盒子内的坐标 = 鼠标在浏览器中的坐标 - left盒子在浏览器中的坐标
				var x = e.pageX - this.offsetLeft;
				var y = e.pageY - this.offsetTop;
				// (2).把鼠标在left盒子内的坐标赋值给黄色遮挡层 这样黄色遮挡层就会和鼠标一起移动
				//      mask.offsetWidth/2  mask盒子宽度的一半 这样可以让鼠标处于黄色遮挡层mask的中间
				//(3).我们mask 在left盒子中移动的距离 maskX
				var maskX = x - mask.offsetWidth / 2;
				var maskY = y - mask.offsetHeight / 2;
				// (4).如果maskX坐标小于0,就让它的坐标固定为0 不让黄色遮挡层出了left盒子的左边界。
				// 当黄色遮挡层的右边界贴上left盒子的右边界的时候,黄色遮挡层左边界距离left左边界为150px = lef盒子宽度 - 黄色遮挡层宽度  也就是遮挡层的最大移动距离  maskMax = left.offsetWidth-mask.offsetWidth; 盒子的高宽一样所以都可以使用maskMax
				var maskMax = left.offsetWidth - mask.offsetWidth;
				if (maskX <= 0) {
					maskX = 0;
				} else if (maskX >= maskMax) {
					maskX = maskMax;
				}
				if (maskY <= 0) {
					maskY = 0;
				} else if (maskY >= maskMax) {
					maskY = maskMax;
				}
				mask.style.left = maskX + 'px';
				mask.style.top = maskY + 'px';

				//3.大图片移动距离 bigX = 遮挡层移动距离 maskX * 大图片最大移动距离 bigMAX / 遮挡层的最大移动距离 maskMax
				var bigImg = document.querySelector('.big_img');
				var bigMax = bigImg.offsetWidth - big.offsetWidth;
				var bigX = maskX * bigMax / maskMax;
				var bigY = maskY * bigMax / maskMax;
				bigImg.style.left = -bigX + 'px';
				bigImg.style.top = -bigY + 'px';

			})
		})
	</script>

图片的话,自己替换一下,能实现效果就行


    <div class="top"></div>
	<div class="body">
		<div class="left">
			<img src="./images/1.jpg">
			<div class="mask"></div>
			<div class="big"><img src="./images/4.jpg" class="big_img"></div>
		</div>
	</div>
<style>
		.top {
			height: 100px;
			width: 100%;
			background: #C87B7C;
		}

		.body {
			margin: 12px 30px;
		}

		.left {
			position: relative;
			width: 450px;
			height: 450px;
			border: 1px solid red;
		}

		.mask {
			display: none;
			position: absolute;
			top: 0;
			left: 0;
			width: 300px;
			height: 300px;
			background: #E3B976;
			opacity: .5;
			cursor: move;
		}

		.big {
			display: none;
			width: 500px;
			height: 500px;
			position: absolute;
			left: 460px;
			top: 0;
			background: pink;
			border: 1px solid #ccc;
			overflow: hidden;
		}

		.big_img {
			position: absolute;
			top: 0;
			left: 0;
			width: 600px;
			height: 600px;
		}
	</style

模态框拖拽效果

<style type="text/css">
	body {
		margin: 0;
		padding: 0;
		position: relative;
	}

	.login-header {
		margin: 40px auto;
		border: solid rgb(80, 155, 158) 2px;
		width: 200px;
		text-align: center;
		height: 40px;
		line-height: 40px;
		border-radius: 20px;
		background-color: pink;
	}

	.content {
		height: 250px;
		width: 470px;
		border: #1d8ecf solid 1px;
		border-radius: 20px;
		z-index: 3;
		background-color: #fff;
		display: none;
		position: absolute;
		left: 40%;
	}

	.login {
		display: none;
		position: fixed;
		border: #EBEBEB solid 1px;
		left: 50%;
		top: 50%;
		background: #e02a2a;
		box-shadow: 0 0 20px #DDD;
		z-index: 999;
		transform: translate(-50%, -50%);
	}

	.login-tittle {
		width: 100%;
		margin: 10px 0 0 0;
		text-align: center;
		line-height: 40px;
		height: 40px;
		font-size: 18px;
		cursor: move;
	}

	.login-input-content {
		margin-top: 20px;
	}

	.login-buton {
		width: 50%;
		line-height: 2.5rem;
		font-size: 18px;
		font-weight: bolder;
		border: #cf4ca3 solid 2px;
		text-align: center;
		margin: 10px auto;
		border-radius: 14px;
		background-color: pink;
		transition: all 1s;
	}

	.login-buton:hover {
		background-color: rgb(167, 219, 243);
		box-shadow: 2px 2px 9px 4px rgb(146, 183, 238),
			-2px -2px 9px 4px rgb(238, 146, 146);
	}

	.login-bg {
		display: none;
		width: 100%;
		height: 100%;
		position: fixed;
		top: 0;
		left: 0;
		background: rgba(0, 0, 0, .3);
	}

	a {
		text-decoration: none;
		color: #eb65d4;
	}

	.login-button a {
		display: none;
	}

	.login-input input.list-input {
		float: left;
		line-height: 35px;
		height: 35px;
		width: 350px;
		border: #EBEBEB solid 1px;
		text-indent: 5px;
	}

	.login-input {
		overflow: hidden;
		margin: 0 0 20px 0;
	}

	.login-input label {
		float: left;
		width: 90px;
		padding-right: 10px;
		text-align: right;
		line-height: 35px;
		height: 35px;
		font-size: 14px;
	}

	.login-tittle span {
		position: absolute;
		font-size: 0.75rem;
		right: -13px;
		top: -18px;
		background: #FFFFFF;
		border: #ebebeb solid 0.0625rem;
		width: 40px;
		height: 40px;
		border-radius: 20px;
	}
</style>
<div class="login-header">
		<a id="link" href="javascript:;">点击,弹出登录框</a>
	</div>
	<div class="content">
		<div id="tittle" class="login-tittle">登陆会员
			<span>
				<a id="closeBtn" href="javascript:void(0);" class="close-login">关闭</a>
			</span>
		</div>
		<div class="login-input-content">
			<div class="login-input">
				<label>用户名:</label>
				<input type="text" name="info[username]" id="username" class="list-input" placeholder="请输入你的名字" />
			</div>
			<div class="login-input">
				<label>登录密码:</label>
				<input type="password" placeholder="请输入密码" class="list-input" name="info[password]" id="password" />
			</div>
		</div>
		<div id="loginBtn" class="login-buton">
			<a href="javascript:void(0);" id="login-button-sumbit">登录</a>
		</div>
	</div>

	<div id="bg" class="login-bg"></div>
<script type="text/javascript">
		var login = document.querySelector('.login-header');
		var content = document.querySelector('.content');
		var mask = document.querySelector('.login-bg');
		var closer = document.querySelector('.close-login');
		var tittle = document.querySelector('.login-tittle');
		login.addEventListener('click', function () {
			content.style.display = 'block';
			mask.style.display = 'block';
		})
		closer.addEventListener('click', function () {
			content.style.display = 'none';
			mask.style.display = 'none';
		})
		tittle.addEventListener('mousedown', function (e) {
			var x = e.pageX - content.offsetLeft;
			var y = e.pageY - content.offsetTop;

			document.addEventListener('mousemove', move);

			function move(e) {
				content.style.left = e.pageX - x + 'px';
				content.style.top = e.pageY - y + 'px';

				if (content.offsetLeft <= 0) {
					content.style.left = 0;
				} else if(content.offsetLeft >= 1040) {
					content.style.left = 1040 + 'px';
				}else if(content.offsetTop <= 0) {
					content.style.top = 0;
				}
			}

			document.addEventListener('mouseup', function () {
				document.removeEventListener('mousemove', move);
			})
		})
	</script>
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值