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


前端:运用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值即可。
前端:运用html+css+jquery.js实现截图游戏_第1张图片
考虑使用原生的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 += `
  • `
    }else{ _str += '
  • '
    ; } } $('body').html(`
      ${_str}
    `
    ); $('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实现截图游戏

    你可能感兴趣的:(前端,前端,javascript,html)