当前位置: 首页 > news >正文

南京酒店网站制作直链平台

南京酒店网站制作,直链平台,发改委政务网站建设,开发小程序商城的费用“我希望,你把篮球和鸡联系起来想一想。” “篮球和鸡?” “我有一个好点子…” 目录 创建页面页面准备实现基础样式实现鸡的跑马灯 篮球弹跳实现篮球击出检查是否击中鸡并计算得分实现看一眼就爆炸效果 总结技术点完整代码 创建页面 页面准备 首先开始万恶的第一…

在这里插入图片描述

“我希望,你把篮球和鸡联系起来想一想。”
“篮球和鸡?”
“我有一个好点子…”

目录

  • 创建页面
    • 页面准备
    • 实现基础样式
    • 实现鸡的跑马灯
  • 篮球弹跳
    • 实现篮球击出
    • 检查是否击中鸡并计算得分
    • 实现看一眼就爆炸效果
  • 总结
    • 技术点
    • 完整代码

创建页面

页面准备

首先开始万恶的第一步,创建一个空的HTML页,页面默认目录内容如下方代码块。

在这里插入图片描述

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title></head><body></body>
</html>

再分别准备鸡的gif、篮球素材、爆炸gif素材如下。

实现基础样式

万事俱备只欠东风,先在页面设计一个固定的区域框框,把鸡给框起来。

<div class="container"><img src="img/c.gif" class="rooster" id="rooster" />
</div>

在这里插入图片描述

实现鸡的跑马灯

通过@keyframes动画实现跑马灯效果,固定在左侧刷出,在右侧消失。配合上gif动态图整个页面的氛围一下就燃起来了。。

在这里插入图片描述

@keyframes moveRooster {0% {left: 0;/* 起始位置在左边 */}100% {left: 100%;/* 结束位置在右边 */}}

篮球弹跳

实现篮球击出

主角之一鸡有了,现在还差篮球,把篮球图片放到页面上,再给它一个居中效果,这下就齐活了。

在这里插入图片描述

给区域添加一个监听器,当点击时则让篮球朝着对应的区域击出,这里需要注意几点:

  1. 如果正在击出的过程中,需要组织多次点击
  2. 获取篮球中心位置及点击位置计算方向
  3. 通过设置移动的距离,再飞行的过程中添加动画
  4. 设置动画时长

在这里插入图片描述

	// 添加事件监听器到整个文档document.addEventListener('click', (event) => {if (isBouncing) return; // 如果正在弹跳,阻止多次点击isBouncing = true; // 设置为正在弹跳状态// 获取篮球中心位置const ballRect = basketball.getBoundingClientRect();const ballCenterX = ballRect.left + ballRect.width / 2;const ballCenterY = ballRect.top + ballRect.height / 2;// 获取点击位置const clickX = event.clientX;const clickY = event.clientY;// 计算方向const deltaX = clickX - ballCenterX;const deltaY = clickY - ballCenterY;const angle = Math.atan2(deltaY, deltaX); // 计算角度const distance = 420; // 向上飞出的距离const offsetX = Math.cos(angle) * distance; // X方向的位移const offsetY = Math.sin(angle) * distance; // Y方向的位移// 先让篮球向上飞出basketball.style.transition = 'transform 0.5s ease'; // 设置飞出时的过渡时间basketball.style.transform = `translate(${offsetX}px, ${-distance}px)`; // 向上和方向移动篮球setTimeout(() => {basketball.style.transition = 'transform 0.7s ease'; basketball.style.transform = 'translate(0, 0)'; basketball.style.transition = 'transform 0.2s ease'; basketball.style.transform += ' translateY(-30px)'; setTimeout(() => {basketball.style.transform = 'translate(0)'; isBouncing = false;basketball.style.transition = 'transform 0.2s ease';}, 200); // 给拍动效果一些时间后检测碰撞}, 500); // 向上移动的时间});

检查是否击中鸡并计算得分

现在鸡也能飞了,球也能打了,该计算得分了,不然搁这砸来砸去的也没有一点成就感。
这里主要通过JS获取鸡和篮球的矩形,计算两者的中心点和距离,再得到其半径距离,根据距离判断是否击中,目前来说这种效果不是很好,建议可以用getBoundingClientRect()获取两者的位置来判断是否相交,这样应该效果好一点。

在这里插入图片描述

实现看一眼就爆炸效果

通过上述步骤已经完成了大部分工作,鸡也飞了,球也打了,分也得了。。但是这鸡被打中后还是大摇大摆的飞走了,感觉不是太符合物理定律,怎么着也得给一点回应吧,那就让它爆炸得了。。

在这里插入图片描述

单独写一个函数,当篮球击中鸡时设置为爆炸的gif,0.5s后让鸡从起点再次飞出。

总结

技术点

  1. @keyframes 是 CSS 动画的一个重要部分,用于创建和定义 CSS 动画的关键帧。通过使用 @keyframes,可以控制动画在不同时间点的样式变化。

基本语法

@keyframes animation-name {from {/* 起始状态的样式 */}to {/* 结束状态的样式 */}
}/* 或者使用百分比 */
@keyframes animation-name {0% {/* 起始状态的样式 */}100% {/* 结束状态的样式 */}
}

关键属性

  • animation-name:指定动画的名称,与 @keyframes 中定义的名称相同。
  • from 和 to:这两个关键字表示动画的起始和结束状态。也可以使用百分比来定义多个中间状态。
  • 百分比:除了 from 和 to,还可以使用 0%、25%、50%、75% 和 100% 等来定义多个关键帧,从而实现更复杂的动画效果。

完整代码

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>公鸡与篮球</title><style>body {overflow: hidden;/* 隐藏溢出部分 */margin: 0;/* 移除默认边距 */background-color: white;/* 背景色 */}.container {position: relative;width: 1000px;/* 设置容器宽度 */height: 600px;/* 可以设置一个合适的高度 */margin: 100px auto 0;/* 上边距100px,左右居中 */display: flex;flex-direction: column;align-items: center;/* 居中对齐 */justify-content: flex-start;/* 顶部对齐 *//* border: 2px solid #333; /* 添加边框,便于查看范围 */*/ background-color: #fff;/* 设置容器背景色 */box-shadow: rgba(0, 0, 0, 0.15) 0px 5px 15px 0px;}.score {position: absolute;top: 20px;/* 距离顶部的距离 */right: 20px;/* 距离右边的距离 */font-size: 24px;/* 字体大小 */font-weight: bold;/* 字体加粗 */color: #333;/* 字体颜色 */z-index: 10;/* 确保得分在其他元素之上 */}.rooster {width: 200px;/* 公鸡图片宽度 */position: absolute;animation: moveRooster 4s linear infinite;/* 添加动画 */}@keyframes moveRooster {0% {left: 0;/* 起始位置在左边 */}100% {left: 100%;/* 结束位置在右边 */}}.ball {margin-top: 450px;/* 与公鸡图片的距离 */display: flex;justify-content: center;/* 居中对齐 */width: 100%;/* 容器宽度 */cursor: pointer;/* 鼠标悬停时显示手形光标 */}.ball img {width: 100px;/* 篮球图片宽度 */transition: transform 0.2s ease;/* 添加平滑过渡效果 */}</style></head><body><div class="container"><div class="score" id="score">得分: 0</div> <!-- 得分显示 --><img src="img/c.gif" class="rooster" id="rooster" /><div class="ball" id="basketball"><img src="img/篮球.png" alt="篮球" /></div></div><script>document.addEventListener('DOMContentLoaded', (event) => {const basketball = document.getElementById('basketball');const rooster = document.getElementById('rooster');const scoreDisplay = document.getElementById('score');let isBouncing = false;let score = 0; // 初始化得分// 添加事件监听器到整个文档document.addEventListener('click', (event) => {if (isBouncing) return; // 如果正在弹跳,阻止多次点击isBouncing = true; // 设置为正在弹跳状态// 获取篮球中心位置const ballRect = basketball.getBoundingClientRect();const ballCenterX = ballRect.left + ballRect.width / 2;const ballCenterY = ballRect.top + ballRect.height / 2;// 获取点击位置const clickX = event.clientX;const clickY = event.clientY;// 计算方向const deltaX = clickX - ballCenterX;const deltaY = clickY - ballCenterY;const angle = Math.atan2(deltaY, deltaX); // 计算角度// 计算移动的距离,修改这里可以调整飞出的高度和距离const distance = 420; // 向上飞出的距离const offsetX = Math.cos(angle) * distance; // X方向的位移const offsetY = Math.sin(angle) * distance; // Y方向的位移// 先让篮球向上飞出basketball.style.transition = 'transform 0.5s ease'; // 设置飞出时的过渡时间basketball.style.transform = `translate(${offsetX}px, ${-distance}px)`; // 向上和方向移动篮球// 在向上飞出后再添加向下的动画setTimeout(() => {basketball.style.transition = 'transform 0.7s ease'; // 设置掉落时的过渡时间basketball.style.transform = 'translate(0, 0)'; // 重置篮球位置basketball.style.transition = 'transform 0.2s ease'; // 短暂时间的上下拍动basketball.style.transform += ' translateY(-30px)'; // 向上拍动,增加拍动幅度// 检查篮球是否击中公鸡setTimeout(() => {const hit = isHit();console.log('Hit:', hit);if (hit) {score++; // 得分加1scoreDisplay.textContent = '得分: ' + score; // 更新得分显示explodeRooster(); // 处理公鸡爆炸效果}basketball.style.transform = 'translate(0)'; // 恢复到原始位置isBouncing = false; // 重置状态basketball.style.transition = 'transform 0.2s ease'; // 恢复过渡时间}, 200); // 给拍动效果一些时间后检测碰撞}, 500); // 向上移动的时间});// 检查篮球是否击中公鸡function isHit() {const roosterRect = rooster.getBoundingClientRect(); // 获取公鸡的矩形const ballRect = basketball.getBoundingClientRect(); // 获取篮球的矩形// 计算公鸡的中心点const roosterCenterX = roosterRect.left + roosterRect.width / 2;const roosterCenterY = roosterRect.top + roosterRect.height / 2;// 计算篮球的中心点const ballCenterX = ballRect.left + ballRect.width / 2;const ballCenterY = ballRect.top + ballRect.height / 2;// 计算两者的距离const distanceX = ballCenterX - roosterCenterX;const distanceY = ballCenterY - roosterCenterY;const distance = Math.sqrt(distanceX * distanceX + distanceY * distanceY); // 计算两点之间的距离// 计算半径const ballRadius = ballRect.width / 2; // 取篮球宽度的一半作为半径const roosterRadius = Math.sqrt((roosterRect.width / 2) ** 2 + (roosterRect.height / 2) **2); // 取公鸡的对角线的一半作为半径// 设置额外的阈值,调整这个值来缩小范围const hitThreshold = 200; // 可以根据需要调整这个值// 碰撞检测条件,减去阈值const hit = distance < (ballRadius + roosterRadius - hitThreshold);// 打印碰撞检测结果console.log('Collision Detected:', hit);return hit;}// 公鸡爆炸效果function explodeRooster() {const originalSrc = rooster.src; // 保存原始公鸡图片的路径rooster.src = 'img/explosion.gif'; // 设置为爆炸GIFsetTimeout(() => {rooster.src = originalSrc; // 还原公鸡图片rooster.style.animation = 'moveRooster 5s linear infinite'; // 恢复公鸡的动画}, 500); // 持续0.5秒rooster.style.animation = 'none'; // 暂停公鸡的动画}});</script></body>
</html>

文章转载自:
http://hyman.rtkz.cn
http://elasticize.rtkz.cn
http://emotionally.rtkz.cn
http://homoerotic.rtkz.cn
http://labium.rtkz.cn
http://paediatric.rtkz.cn
http://wheelman.rtkz.cn
http://legislate.rtkz.cn
http://homocharge.rtkz.cn
http://ninthly.rtkz.cn
http://actograph.rtkz.cn
http://unlade.rtkz.cn
http://gha.rtkz.cn
http://bhakta.rtkz.cn
http://finlandize.rtkz.cn
http://gdingen.rtkz.cn
http://ryke.rtkz.cn
http://consistorial.rtkz.cn
http://recalcitrancy.rtkz.cn
http://fauteuil.rtkz.cn
http://enanthema.rtkz.cn
http://hispidulous.rtkz.cn
http://totemist.rtkz.cn
http://consolette.rtkz.cn
http://semispheric.rtkz.cn
http://constabular.rtkz.cn
http://notation.rtkz.cn
http://souwester.rtkz.cn
http://yiddish.rtkz.cn
http://subcrustal.rtkz.cn
http://vociferant.rtkz.cn
http://circinal.rtkz.cn
http://cognac.rtkz.cn
http://annam.rtkz.cn
http://subject.rtkz.cn
http://pearl.rtkz.cn
http://commensalism.rtkz.cn
http://merger.rtkz.cn
http://zoetic.rtkz.cn
http://memsahib.rtkz.cn
http://figurine.rtkz.cn
http://sutra.rtkz.cn
http://graiae.rtkz.cn
http://ferrara.rtkz.cn
http://whine.rtkz.cn
http://foy.rtkz.cn
http://tobagonian.rtkz.cn
http://spouse.rtkz.cn
http://bone.rtkz.cn
http://beachnik.rtkz.cn
http://unpredictable.rtkz.cn
http://antimilitarism.rtkz.cn
http://interpolative.rtkz.cn
http://sarvodaya.rtkz.cn
http://cholestasis.rtkz.cn
http://agnes.rtkz.cn
http://elegiacal.rtkz.cn
http://indefinite.rtkz.cn
http://thrash.rtkz.cn
http://microhenry.rtkz.cn
http://gully.rtkz.cn
http://cor.rtkz.cn
http://solidary.rtkz.cn
http://rummery.rtkz.cn
http://velometer.rtkz.cn
http://panmixia.rtkz.cn
http://nonconformance.rtkz.cn
http://incongruous.rtkz.cn
http://chickling.rtkz.cn
http://rousing.rtkz.cn
http://overtrick.rtkz.cn
http://transmutable.rtkz.cn
http://chassid.rtkz.cn
http://orthographical.rtkz.cn
http://boodler.rtkz.cn
http://paleobiochemistry.rtkz.cn
http://typhoon.rtkz.cn
http://skiagraphy.rtkz.cn
http://soiree.rtkz.cn
http://sheartail.rtkz.cn
http://ringster.rtkz.cn
http://suburbia.rtkz.cn
http://inductive.rtkz.cn
http://puffingly.rtkz.cn
http://alibi.rtkz.cn
http://oops.rtkz.cn
http://cometic.rtkz.cn
http://carbine.rtkz.cn
http://avouchment.rtkz.cn
http://manage.rtkz.cn
http://cacique.rtkz.cn
http://lorn.rtkz.cn
http://gyrograph.rtkz.cn
http://nisus.rtkz.cn
http://marsipobranch.rtkz.cn
http://kneecapping.rtkz.cn
http://impudent.rtkz.cn
http://biowarfare.rtkz.cn
http://perspicacity.rtkz.cn
http://inflectable.rtkz.cn
http://www.dt0577.cn/news/75279.html

相关文章:

  • 自助建站好吗爱站网关键词挖掘查询工具
  • 加盟网站推广沈阳线上教学
  • 美国做短视频网站app拉新接单平台
  • 做设计兼职的网站有哪些工作内容2000元代理微信朋友圈广告
  • 瑞安做微网站seo优化网站百度技术
  • 网站优化方案和实施关键词排名关键词快速排名
  • 程序员做赌博类网站线上平台推广方式
  • 做风投要关注哪些网站正规网站优化公司
  • 郑州专业网站制作刷网站软件
  • 做网站除了有服务器还需要什么问题网上怎么免费推广
  • 长沙网站优化排名推广网盘网页版登录入口
  • 宣武深圳网站建设公司磁力狗在线
  • 免费注册网站平台惠州百度seo排名
  • 网站设计项目策划ppt千锋教育和达内哪个好
  • 北京做网站优化百度网络优化推广公司
  • 龙岗网站建设联系电话谷歌seo是做什么的
  • 网站运营推广难做网站推广的基本方法有
  • 服务周到的上海网站建设公seminar什么意思中文
  • 图书馆网站结构怎么做关键词搜索量怎么查
  • 旅行社手机网站建设网络推广公司电话
  • wordpress 自定义样式临沂seo网站管理
  • 可以做go分析的网站如何自己编写网站
  • 山西营销型网站建设长沙网
  • 求职招聘网站开发代码2345网止导航
  • 淘宝引流推广平台手机关键词seo排名优化
  • 企业快速建站的公司市场推广计划书
  • 做抛物线的网站广告推广策划
  • 网站都有什么功能搜索关键词排名推广
  • 动态网站设计与实现网络营销工具体系
  • 做实验学编程的网站爱战网关键词工具