前端:运用html+css+jquery.js实现截图游戏

news2025/1/20 3:53:49

在这里插入图片描述

前端:运用html+css+jquery.js实现截图游戏

        • 1. 前言
        • 2. 实现原理
        • 3. 参考代码和运行结果

1. 前言

最近在刷手机视频时,总是能刷到一个这样的视频,视频上是一个截图游戏,当图片上的某个片段正好在图片的正确位置时,暂停视频,截好图发到评论区,显示你很牛逼,哈哈。如果读者觉得小编这篇博客让读者学到了一些关于前端布局的知识,希望读者能点赞支持一下。
请添加图片描述,上述运行结果正好演示这个截图效果。

2. 实现原理

怎样把一张图片分成多个部分呢?个人觉得可以这样做,首先,需要创建对应多的标签元素,对于每一个标签元素,设置相应的宽度和高度,然后css样式中设置背景图片background-image,背景图片位置background-position-x、background-positon-y(经过计算即可),这样就可以实现把一张图片分成多张小图片。关于这些对应多的标签元素,考虑使用li标签。关于li标签的布局,先把其父标签ul设置为相对定位(position:relative),然后其子标签li标签使用绝对定位(position:absolute),然后设置相应的top、left值即可。至于其中一个部分动的画面,使用定时器,定时器内部的函数操作这个部分的top、left值即可。
请添加图片描述
考虑使用原生的js代码实现上述效果,代码量会大一些,于是使用封装的js库jquery.js,关于代码中jquery的一些知识,小编在此讲述一下。

$(‘body ul li’)
上述是查找 html 中标签元素,如果标签元素是单个,使用.attr(属性名称)即可获取这个元素的相关属性,如果标签元素是多个,那么是获取查找的标签元素的第一个元素的相关属性。
.each((ele)=>{})是对查找的元素进行遍历,其中ele是查找的元素中每一个,相当于js中forEach
想了解跟多关于jquery的知识,可以去jquery知识专栏学习,链接为:W3school

3. 参考代码和运行结果

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>截图</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        body ul{
            width: 500px;
            height: 518px;
            margin: 20px auto;
            list-style: none;
            position: relative;
        }
        body button{
            margin:0 auto;
            width: 30px;
            height: 25px;
            display: block;
        }
        .margin-top-1px{
            margin-top: 1px;
        }
        body ul li{
            background-image: url('./1.jpg');
            width: 125px;
            height: 172px;
            position: absolute;
            text-align: center;
            line-height: 172px;
            font-size: 25px;
            font-weight: bolder;
            color: red;
            z-index: 1;
        }
    </style>
    <script src="./jquery.js"></script>
</head>
<body>
</body>
<script type="text/javascript">
    // 图片大小 500 * 518
    // 500/4 = 125 518/3 = 172 余 2
    var arr = '鼠牛虎兔龙蛇马羊猴鸡狗猪'.split('');
    var _str = '';
    for(let i=0;i<12;i++){
        if(i >= 4){
            _str += `<li class="margin-top-1px"></li>`
        }else{
            _str += '<li></li>';
        }
    }
    $('body').html(`<ul>${_str}</ul><button>暂停</button>`);
    $('body ul li').each((index,ele)=>{
        $(ele).css({
            'top':parseInt(index/4)*172+'px',
            'left':(index%4)*125+'px',
            'backgroundPositionX': -(index % 4) * 125 + 'px',
            'backgroundPositionY': -parseInt(index / 4) * 172 + 'px'
        });
        $(ele).text(arr[index]);
    });

    var ele2 = $('body ul li').eq(1);
    ele2.css('zIndex',2);
    var flag = 'r'; // 状态 r b l t
    var fun1 = ()=>{
        let top = parseInt(ele2.css('top'));
        let left = parseInt(ele2.css('left'));
        // ul 标签样式 宽度 和 高度 为 500 , 518
        // 500 - 125 = 375 518 - 172 = 346
        
        if (top == 0 && left >= 375) 
            flag = 'b';

        if(left == 375 && top >= 346)
            flag = 'l';
        
        if(top == 346 && left <= 0)
            flag = 't';

        if(left == 0 && top <= 0)
            flag = 'r';

        if(flag == 'r')
            left ++;
        else if(flag == 'b')
            top ++;
        else if(flag == 'l')
            left --;
        else 
            top --;

        ele2.css({
            'top': top + 'px',
            'left': left + 'px'
        });
        // console.log(top,left);
    };
    var timer2 = setInterval(fun1,10);
    var flag2 = true;
    $('body button').click(()=>{
        if(flag2){
            let top = parseInt(ele2.css('top'));
            let left = parseInt(ele2.css('left'));
            clearInterval(timer2);
            flag2 = false;
            $('body button').text('开始');

            if(top == 0 && left == 125){
                alert('组图成功!');
            }
        }else{
            flag2 = true;
            timer2 = setInterval(fun1, 10);
            $('body button').text('暂停');
        }
    });
</script>
</html>

运行结果:

前端:运用html+css+jquery.js实现截图游戏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/895777.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++ 面向对象三大特性——多态

✅<1>主页&#xff1a;我的代码爱吃辣 &#x1f4c3;<2>知识讲解&#xff1a;C 继承 ☂️<3>开发环境&#xff1a;Visual Studio 2022 &#x1f4ac;<4>前言&#xff1a;面向对象三大特性的&#xff0c;封装&#xff0c;继承&#xff0c;多态&#xff…

最强自动化测试框架Playwright(34)CDPSession

在 Playwright 中&#xff0c;CDPSession 类是用于与浏览器的 Chrome DevTools Protocol (CDP) 会话进行交互的对象。CDP 是与Chromium浏览器通信的底层协议&#xff0c;它提供了许多与浏览器进行交互和控制的功能。 CDPSession 类提供了执行底层 CDP 命令的方法&#xff0c;并…

设计模式之适配器模式(Adapter)的C++实现

1、适配器模式的提出 在软件功能开发中&#xff0c;由于使用环境的改变&#xff0c;之前一些类的旧接口放在新环境的功能模块中不再适用。如何使旧接口能适用于新的环境&#xff1f;适配器可以解决此类问题。适配器模式&#xff1a;通过增加一个适配器类&#xff0c;在适配器接…

Flink安装与使用

1.安装准备工作 下载flink Apache Flink: 下载 解压 [dodahost166 bigdata]$ tar -zxvf flink-1.12.0-bin-scala_2.11.tgz 2.Flinnk的standalone模式安装 2.1修改配置文件并启动 修改&#xff0c;好像使用默认的就可以了 [dodahost166 conf]$ more flink-conf.yaml 启动 …

角色入门02----动画蓝图

使用UE4的小白人动画&#xff0c;首先将它动画资产重定向。先ue4转ue5小银人&#xff0c;在把转换后的动画ue5转ue4给这个低模人物就动画就不会很鬼畜。 进入动画创建混合空间1D,这相当于可以组合很多动画 在跑步的混合空间里设置横坐标为Speed&#xff0c;最大值为400&#xf…

DataWhale 机器学习夏令营第三期

DataWhale 机器学习夏令营第二期 学习记录一 (2023.08.18)1.赛题理解2.缺失值分析3. 简单特征提取4. 数据可视化离散变量离散变量分布分析 DataWhale 机器学习夏令营第三期 ——用户新增预测挑战赛 学习记录一 (2023.08.18) 已跑通baseline&#xff0c;换为lightgbm基线&#…

Springboot 实践(8)springboot集成Oauth2.0授权包,对接spring security接口

此文之前&#xff0c;项目已经添加了数据库DAO服务接口、资源访问目录、以及数据访问的html页面&#xff0c;同时项目集成了spring security&#xff0c;并替换了登录授权页面&#xff1b;但是&#xff0c;系统用户存储代码之中&#xff0c;而且只注册了admin和user两个用户。在…

记一次项目内存优化--内存泄漏

需求–内存泄漏优化&#xff0c;PSS有所下降&#xff0c; OOM率减少 主要是与某个版本作基准进行对比&#xff08;一般是最新版本的前一个版本作原数据&#xff09;&#xff0c;优化后&#xff0c;PSS有所下降&#xff0c;线上OOM率减少&#xff08;Bugly版本对比&#xff09;…

网工内推 | 数通工程师,有运营商工作经验优先

01 国育产教融合教育科技&#xff08;海南&#xff09;有限公司 招聘岗位&#xff1a;通信工程师 职责描述&#xff1a; 1、负责锐捷4/5G皮基站产品的工程交付工作&#xff0c;包括现场勘测、硬件督导、开通调测、测试优化等技术交付工作&#xff1b; 2、负责锐捷4/5G皮基站网…

【探索Linux】—— 强大的命令行工具 P.5(yum工具、git 命令行提交代码)

阅读导航 前言一、软件包管理器 yum1.yum的概念yum的基本指令使用例子 二、git 命令行提交代码总结温馨提示 前言 前面我们讲了C语言的基础知识&#xff0c;也了解了一些数据结构&#xff0c;并且讲了有关C的一些知识&#xff0c;也学习了一些Linux的基本操作&#xff0c;也了…

I2S/PCM board-level 约束及同步(latencyskewbitsync)

I2S/PCM是典型的低速串口&#xff0c;在两个方向上分别有两组信号&#xff0c;我们已soc为视角分为soc-adif和外设audio-codec。 那么adif输入&#xff1a; sclk_i, ws_i, sdi 当然并不是三个输入信号同时有效&#xff0c;只有adif RX slave时&#xff0c;三个输入都会有效…

贷款公司精准获客,快速找到目标客户,直击获客高点!

目前&#xff0c;运营商的大数据技术正在逐步发展壮大&#xff0c;并已广泛应用于各个行业。运营商大数据市场有待发展的潜在行业发展趋势难以预料&#xff0c;整体能源规模达数万亿元。运营商大数据与三家网络运营商进行了深度战略合作&#xff0c;利用移动电信运营商的大数据…

使用coloc 进行 QTL 共定位Colocalization

GWAS找到显著信号位点后&#xff0c;需要解释显著信号位点如何影响表型。 常见的一个解释方法是共定位分析。 主流的共定位分析包括&#xff1a; 1&#xff09;GWAS和eQTL共定位&#xff1b; 2&#xff09;GWAS和sQTL共定位&#xff1b; 3&#xff09;GWAS和meQTL共定位&am…

上一个说软件测试简单的,已经被面试官问emo了···

现在已经过了 ”不会但我会学“ 就能感动面试官的时代&#xff0c;随着供需关系的变化&#xff0c;不论是对于面试官还是面试者&#xff0c;面试的成本越来越高。为了筛选到更优秀的程序员&#xff0c;面试官们可谓是绞尽了脑汁&#xff0c;”面试造火箭&#xff0c;工作拧螺丝…

PS丢失d3dcompiler_47.dll文件怎么办(附详细修复方法)

我们在安装PS等软件的时候&#xff0c;有可能安装完之后出现以下问题&#xff08;特别是win10或者win11系统&#xff09; 错误&#xff1a; 打开PS的时候出现这个错误&#xff1a;无法启动此程序&#xff0c;因为计算机中丢失D3DCOMPILER_47.dll。尝试重新安装该程序以解决此问…

03-微信小程序常用组件-视图容器组件

微信小程序组件-视图容器 文章目录 视图容器view 视图容器案例代码 swiper 滑块视图容器案例代码indicator-color 微信小程序包含了六大组件&#xff1a; 视图容器、 基础内容、 导航、 表单、 互动和 导航。这些组件可以通过WXML和WXSS进行布局和样式设置&#xff0c;从…

CFD特性FPmarkets澳福认为了解这11种足够了

CFD在交易中很重要&#xff0c;但CFD特性很多投资者不了解&#xff0c;FPmarkets澳福认为了解这11种足够了&#xff1a; 1. 投资者通过标的资产价格价值的变化获利&#xff0c;而不拥有标的资产。 2. 差价合约交易没有固定的到期日。 3. 与期货交易类似&#xff0c;差价合约交易…

海外问卷脚本机器人哪里哪里有?是真的吗?

大家好&#xff0c;我是橙河老师&#xff0c;今天讲一讲海外问卷项目能不能用脚本操作&#xff1f; 最近没怎么写文章&#xff0c;确实比较忙。我本人每天至少要面对5-10个客户咨询项目&#xff0c;每隔一段时间&#xff0c;都会有人问我&#xff1a;操作海外问卷有没有脚本&a…

文字点选验证码识别(上)-YOLO位置识别

声明 本文以教学为基准、本文提供的可操作性不得用于任何商业用途和违法违规场景。 本人对任何原因在使用本人中提供的代码和策略时可能对用户自己或他人造成的任何形式的损失和伤害不承担责任。 如有侵权,请联系我进行删除。 文章中没有代码,只有过程思路,请大家谨慎订阅。…

集简云简化流程模板,轻松实现工作流程自动化

集简云平台内置大量自动化流程模板&#xff0c;用户可以在“模板中心”搜索应用名称&#xff0c;选择适合自己的场景&#xff0c;直接使用。本期分享集简云自动化工作流程。 模板推荐 模板1&#xff1a;小鹅通新增订单后同步到seatable并更新微伴助手用户信息 集成应用&#…