含羞默默一张一合效果---田

简介: 含羞默默一张一合效果---田首先展示“田”字效果 实现思想主要分为几部分随机生成颜色值 var getRandomColor = function(){ return '#' + (fu...

含羞默默一张一合效果---田
首先展示“田”字效果


实现思想主要分为几部分
随机生成颜色值

            var getRandomColor = function(){
                return  '#' +
                    (function(color){
                    return (color +=  '0123456789abcdef'[Math.floor(Math.random()*16)])
                        && (color.length == 6) ?  color : arguments.callee(color);
                })('');
            }

参考:司徒正美《javascript获取随机颜色

创建span标签,插入div中。
creSpan函数,n指当前个数,mpid指父容器div,mleft指当前span的left的值,mtop指当前span的top值

            function creSpan(n,mpId,mleft,mtop){
                var mSpan = document.createElement("span");  
                var pId = mpId[0];
                pId.appendChild(mSpan);
                with(mSpan.style){
                    left = mleft+"px";
                    top = mtop+"px";
                    background = getRandomColor();
                }
            }


生成“田”字
创建一个二维数组保存每个creSpan的对象。
myleft=100,mtop=50 默认初始值距左距顶的距离。
画“田”字,使用双重循环生成。

                var myleft = 100;
                var mytop = 50;
                var arr = new Array();
                var test =  $("#test");
                for(var j=0;j<23;j++){
                    arr[j] = new Array();
                    if(j<3){
                        for(var i=0;i<19;i++){
                            myleft+=32;
                            arr[j][i] = new creSpan((j+1)*(i+1),test,myleft,mytop);
                        }
                    }
                    else if(j>2&&j<10){
                        for(var i=0;i<19;i++){
                            myleft+=32;
                            if(i<3){
                                arr[j][i] = new creSpan((j+1)*(i+1),test,myleft,mytop);
                            }
                            else if(i>7&&i<11){
                                arr[j][i] = new creSpan((j+1)*(i+1),test,myleft,mytop);
                            }
                            else if(i>15){
                                arr[j][i] = new creSpan((j+1)*(i+1),test,myleft,mytop);
                            }
                        }
                    }
                    else if(j>9&&j<13){
                        for(var i=0;i<19;i++){
                            myleft+=32;
                            arr[j][i] = new creSpan((j+1)*(i+1),test,myleft,mytop);
                        }
                    }
                    else if(j>12&&j<20){
                        for(var i=0;i<19;i++){
                            myleft+=32;
                            if(i<3){
                                arr[j][i] = new creSpan((j+1)*(i+1),test,myleft,mytop);
                            }
                            else if(i>7&&i<11){
                                arr[j][i] = new creSpan((j+1)*(i+1),test,myleft,mytop);
                            }
                            else if(i>15){
                                arr[j][i] = new creSpan((j+1)*(i+1),test,myleft,mytop);
                            }
                        }
                    }
                    else{
                        for(var i=0;i<19;i++){
                            myleft+=32;
                            arr[j][i] = new creSpan((j+1)*(i+1),test,myleft,mytop);
                        }
                    }
                    mytop+=32;
                    myleft=100;
                }

 

当鼠标移动到每个span上时尖尖缩小,然后慢慢张开。
主要采用jquery中的animate函数。控制width,height,left,top的值。

                $.each($("#test span"),function(k,v){
                    $(this).mouseover(function(){
                        $(this).animate({
                            width:"10px",
                            height:"10px",
                            left:"+="+parseInt(30-20)/2+"px",
                            top:"+="+parseInt(30-20)/2+"px"
                        },3000,function(){
                            $(this).animate({
                                width:"30px",
                                height:"30px",
                                left:"-="+parseInt(30-20)/2+"px",
                                top:"-="+parseInt(30-20)/2+"px"
                            },1000);
                        });
                    });
                });



示例效果:

<!DOCTYPE html> <html> <head> <title>含羞默默一张一合效果---田</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script type="text/javascript" src="http://files.cnblogs.com/kuikui/jquery.js"></script> <style type="text/css"> *{margin:0px;padding:0px;} #test{width:800px; height: 800px; margin: 30px auto 0px; overflow: hidden; position: relative; background-color: #F1F1F1;} #test span{display: block; position: absolute; width: 30px; height: 30px; } </style> </head> <body> <div id="test"></div> <script type="text/javascript"> var getRandomColor = function(){ return '#' + (function(color){ return (color += '0123456789abcdef'[Math.floor(Math.random()*16)]) && (color.length == 6) ? color : arguments.callee(color); })(''); } function creSpan(n,mpId,mleft,mtop){ var mSpan = document.createElement("span"); var pId = mpId[0]; pId.appendChild(mSpan); with(mSpan.style){ left = mleft+"px"; top = mtop+"px"; background = getRandomColor(); } } </script> <script type="text/javascript"> $(function(){ var myleft = 100; var mytop = 50; var arr = new Array(); var test = $("#test"); for(var j=0;j<23;j++){ arr[j] = new Array(); if(j<3){ for(var i=0;i<19;i++){ myleft+=32; arr[j][i] = new creSpan((j+1)*(i+1),test,myleft,mytop); } } else if(j>2&&j<10){ for(var i=0;i<19;i++){ myleft+=32; if(i<3){ arr[j][i] = new creSpan((j+1)*(i+1),test,myleft,mytop); } else if(i>7&&i<11){ arr[j][i] = new creSpan((j+1)*(i+1),test,myleft,mytop); } else if(i>15){ arr[j][i] = new creSpan((j+1)*(i+1),test,myleft,mytop); } } } else if(j>9&&j<13){ for(var i=0;i<19;i++){ myleft+=32; arr[j][i] = new creSpan((j+1)*(i+1),test,myleft,mytop); } } else if(j>12&&j<20){ for(var i=0;i<19;i++){ myleft+=32; if(i<3){ arr[j][i] = new creSpan((j+1)*(i+1),test,myleft,mytop); } else if(i>7&&i<11){ arr[j][i] = new creSpan((j+1)*(i+1),test,myleft,mytop); } else if(i>15){ arr[j][i] = new creSpan((j+1)*(i+1),test,myleft,mytop); } } } else{ for(var i=0;i<19;i++){ myleft+=32; arr[j][i] = new creSpan((j+1)*(i+1),test,myleft,mytop); } } mytop+=32; myleft=100; } $.each($("#test span"),function(k,v){ $(this).mouseover(function(){ $(this).animate({ width:"10px", height:"10px", left:"+="+parseInt(30-20)/2+"px", top:"+="+parseInt(30-20)/2+"px" },3000,function(){ $(this).animate({ width:"30px", height:"30px", left:"-="+parseInt(30-20)/2+"px", top:"-="+parseInt(30-20)/2+"px" },1000); }); }); }); }); </script> </body> </html>

目录
相关文章
|
2天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
260 116
|
17天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
11天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
651 223
|
4天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
314 31
Meta SAM3开源:让图像分割,听懂你的话
|
9天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1490 157
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
888 61
|
6天前
|
编解码 Linux 数据安全/隐私保护
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
285 139