<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        jQuery實現網頁拼圖游戲

        來源:懂視網 責編:小采 時間:2020-11-27 22:03:15
        文檔

        jQuery實現網頁拼圖游戲

        jQuery實現網頁拼圖游戲:之前看了一個頁面中將圖片分割的效果,感覺不錯,有些好奇他是怎么實現的。 跟搭檔說了一下,大概明白。其實就是利用 overflow=hidden ,margin-left, margin-top 這三個屬性的配合,讓人感覺圖片被一個個格子地分開了。 剛剛寫了個 Jquery的小插件
        推薦度:
        導讀jQuery實現網頁拼圖游戲:之前看了一個頁面中將圖片分割的效果,感覺不錯,有些好奇他是怎么實現的。 跟搭檔說了一下,大概明白。其實就是利用 overflow=hidden ,margin-left, margin-top 這三個屬性的配合,讓人感覺圖片被一個個格子地分開了。 剛剛寫了個 Jquery的小插件

        之前看了一個頁面中將圖片分割的效果,感覺不錯,有些好奇他是怎么實現的。

        跟搭檔說了一下,大概明白。其實就是利用 overflow=hidden ,margin-left, margin-top 這三個屬性的配合,讓人感覺圖片被一個個格子地分開了。

        剛剛寫了個 Jquery的小插件,處理了整個的圖片分格化,用戶只要指定一個圖片就可以自動生成格子圖片,還自動生成“打亂”,“復原”,行,列等按鈕。同時具有提示位置正確的圖片數的功能。

        看效果:

        1.生成格子圖片成功:

        2.打亂圖片次序

        3.手動設置行列,這里限定了最大的行列都是 10 ,最小是3,多了會眼花撩亂。

        4.再次打亂

        5.去除小格子的邊框,去除了圖片分格子就不明顯了

        在頁面上這用調用:

        <div style="width:640px; height:400px;">
         <img id="origin" class="myimage" src="11.jpg"/>
        </div><div id="targetDiv"></div>
        <script>
        $(document).ready(function(){
         
         $("#origin").tablePic({
         target: 'targetDiv',col:4,row:3,borderColor:'#fff',freeColor:'#cec'
         });
         
        });
        </script>

        完整的js:

        (function($){
         /*
         * 坐標類
         * @param {Object} x
         * @param {Object} y
         * @memberOf {TypeName} 
         */
         function Point(x,y){
         this.top=x;
         this.left=y;
         }
         
         /**
         * 修正版本,原圖右下角的小圖不顯示,是活動格子
         * 添加 “打亂”,“換圖按鈕”
         * 
         * @param {Object} options
         * @memberOf {TypeName} 
         * @return {TypeName} 
         */
         $.fn.tablePic=function(options){
         var DEFAULT={
         target:'',
         row:2,
         col:2,
         isBorder:true,
         borderColor:'#f88',
         mode:'strict',//是否嚴格判斷格式相鄰移到,如果不是strict,那么就是不管怎樣都是直接和空白格式內容交換
         freeColor:'#92cf28' //空白格子的背景顏色
         }
         
         var options=$.extend(DEFAULT,options);
         //系統變量
         var SYSTEM={
         width:0,height:0,
         //小格子的大小
         sonWidth:0,sonHeight:0,
         src:null,
         current:'',correct:0,//正確個數
         hits:0//步數
         }
         var parent=null;//這個是待分割的圖片
         var target=null;//這個是格子存放的容器,一般是一個div,也應該是!!!!!別搞獨特=.=
         
         //這個是左,上 的margin
         var margin=new Array();
         
         this.each(function(){
         parent=$(this);
         SYSTEM.src=parent.attr("src");
         SYSTEM.width=parseInt(parent.css("width"));
         SYSTEM.height=parseInt(parent.css("height"));
         SYSTEM.sonWidth=Math.round(SYSTEM.width/options.col);
         SYSTEM.sonHeight=Math.round(SYSTEM.height/options.row);
         
         init();
         initMargin();
         });
         
         //初始化目標
         function init(){
         target=$("#"+options.target);
         initTarget();
         //最后我們要添加一個空白的divprepend
         target.append($("<div/>").attr("id","control").css("position","absolute").css("top",SYSTEM.height+8+((options.isBorder)?(options.row):0)+'px').css("right","0px").css("width",SYSTEM.Width/3).css("height",SYSTEM.sonHeight)
         .append($("<span/>").attr("id","correctInfo"))
         .append($("<button/>").bind("click",function(){initMargin();}).append("復原"))
         .append($("<button/>").bind("click",function(){mixMargin();}).append("打亂"))
         .append($("<button/>").attr("id","isBorder").bind("click",function(){border();}).append(((options.isBorder)?"去除":"添加")+"邊框"))
         .append(" 行:")
         .append($("<select/>").attr("id","rowSelect"))
         .append("列:")
         .append($("<select/>").attr("id","colSelect"))
         );
         initSelect();
         }
         
         function initTarget(){
         SYSTEM.sonWidth=Math.floor(SYSTEM.width/options.col);
         SYSTEM.sonHeight=Math.floor(SYSTEM.height/options.row);
         target.css("width",SYSTEM.width+'px').css("height",SYSTEM.height+'px');
         //是否顯示邊框
         if(options.isBorder){
         target.css("width",SYSTEM.width+options.col+'px').css("height",SYSTEM.height+options.row+'px');
         }
         target.css("position","relative");
         }
         /**
         * 設置兩個 select的屬性,并添加事件
         */
         function initSelect(){
         for(var i=3;i<=10;i++){
         $("#rowSelect").append($("<option/>").attr("vaule",i).append(i));
         $("#colSelect").append($("<option/>").attr("vaule",i).append(i));
         }
         target.find("select").each(function(){
         $(this).change(function(){
         options.row=parseInt($("#rowSelect").val());
         options.col=parseInt($("#colSelect").val());
         initTarget();
         initMargin();
         });
         });
         }
         
         /**
         * 邊框的設置
         */
         function border(){
         options.isBorder=!options.isBorder;
         //initTarget();
         //initMargin();
         target.children(":not(#control)").children().each(function(){
         $(this).css("border-top",(options.isBorder?"1px solid "+options.borderColor:"none")).css("border-left",(options.isBorder?"1px solid "+options.borderColor:"none"));
         });
         $("#isBorder").html(((options.isBorder)?"去除":"添加")+"邊框");
         }
         
         function initImage(){
         //清空 target
         target.children(":not(#control)").remove();
         $("#rowSelect").val(options.row);
         $("#colSelect").val(options.col);
         //生成格子,基本形式:
         //<div class="miniDiv">
         // <div><img src="?????"/></div>
         // </div>
         //
         //為了兼容神奇的ie6,我們添加一個div在外圍
         var $temp=$("<div/>");
         target.append($temp);
         for(var i=0;i<options.row*options.col;i++){
         if(margin[i].left==options.col-1&&margin[i].top==options.row-1){
         $temp.append($("<div/>").attr("id","gz"+(i+1)).css("border-top",(options.isBorder?"1px solid "+options.borderColor:"none")).css("border-left",(options.isBorder?"1px solid "+options.borderColor:"none")).css("width",SYSTEM.sonWidth).css("height",SYSTEM.sonHeight).css("overflow","hidden").css("float","left")
         .append($("<div/>").css("width","100%").css("height","100%").css("background-color",options.freeColor)));
         SYSTEM.current='gz'+(i+1);
         }
         else{
         $temp.append($("<div/>").attr("id","gz"+(i+1)).css("border-top",(options.isBorder?"1px solid "+options.borderColor:"none")).css("border-left",(options.isBorder?"1px solid "+options.borderColor:"none")).css("width",SYSTEM.sonWidth).css("height",SYSTEM.sonHeight).css("overflow","hidden").css("float","left").append(
         $("<div/>").css("margin-left",(margin[i].left*SYSTEM.sonWidth)*-1+"px").css("margin-top",(margin[i].top*SYSTEM.sonHeight)*-1+"px")
         .append($("<img/>").attr("src",SYSTEM.src).css("width",SYSTEM.width+'px').css("height",SYSTEM.height+'px').css("display","block"))
         ));
         }
         }
         
         initHandle();
         checkRight();
         }
         
         //初始化 margin 這個屬性
         function initMargin(){
         var temp=0;
         for(var i=0;i<options.row;i++){
         for(var j=0;j<options.col;j++)
         margin[temp++]=new Point(i,j);
         }
         initImage();
         }
         
         //打亂圖片次序
         //使用 margin.splice 不能正確返回被刪除的數組元素,這里使用一個 中間 數組進行隨機排序
         function mixMargin(){
         var temp1=new Array();
         var temp2=new Array();
         for(var i=0;i<options.col*options.row;i++){
         temp2[i]=i;
         }
         //使用 js 的splice 函數得到隨機排序的數組
         for(var i=0;i<options.col*options.row;i++){
         temp1[i]=margin[temp2.splice(Math.floor(Math.random()*temp2.length),1)];
         }
         margin=temp1;
         initImage();
         }
         
         /**
         * 添加事件
         * @memberOf {TypeName} 
         * @return {TypeName} 
         */
         function initHandle(){
         for(var i=0;i<=options.col*options.row;i++){
         $("#gz"+i).bind("click",function(){
         var newId=$(this).attr("id");
         if(newId==SYSTEM.current)
         return false;
         //如果設定了mode為strict,就判斷是不是與空白格子相鄰,只有相鄰了才可以發生效果
         if(options.mode=='strict'){
         if(SYSTEM.current=='gz0'&&newId!=('gz'+options.col))
         return false;
         var ii=parseInt(newId.substring(2));
         var jj=parseInt(SYSTEM.current.substring(2));
         if(!(Math.abs(ii-jj)==1||Math.abs(ii-jj)==options.col))
         return false;
         }
         var temp=$(this).html();
         $(this).html($("#"+SYSTEM.current).html());
         $("#"+SYSTEM.current).html(temp);
         SYSTEM.current=$(this).attr("id");
         checkRight();
         });
         }
         }
         
         /*
         * 檢查當前正確的圖片數
         */
         function checkRight(){
         SYSTEM.correct=0;
         for(var i=0;i<options.col*options.row-1;i++){
         var $temp=$("#gz"+(i+1)).children(":first");
         if($temp.html()!=''&&parseInt($temp.css("margin-left"))==(-1*SYSTEM.sonWidth*(i%options.col))&&parseInt($temp.css("margin-top"))==(-1*SYSTEM.sonHeight*Math.floor(i/options.col))){
         SYSTEM.correct++;
         }
         }
         showCorrect();
         }
         
         /*
         * 顯示正確的圖片信息
         */
         function showCorrect(){
         $("#correctInfo").html("正確圖片:"+SYSTEM.correct+"/"+(options.col*options.row-1)+" ");
         }
         }
        })(jQuery);

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        jQuery實現網頁拼圖游戲

        jQuery實現網頁拼圖游戲:之前看了一個頁面中將圖片分割的效果,感覺不錯,有些好奇他是怎么實現的。 跟搭檔說了一下,大概明白。其實就是利用 overflow=hidden ,margin-left, margin-top 這三個屬性的配合,讓人感覺圖片被一個個格子地分開了。 剛剛寫了個 Jquery的小插件
        推薦度:
        標簽: 頁面 網頁 實現
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲国产成人久久精品99| 国产免费久久精品99re丫y| 免费一级黄色毛片| 最新亚洲人成网站在线观看| 性盈盈影院免费视频观看在线一区| 亚洲日本人成中文字幕| 可以免费看黄视频的网站| 亚洲剧场午夜在线观看| 4399好看日本在线电影免费| 亚洲人妖女同在线播放| 精品剧情v国产在免费线观看| 久久人午夜亚洲精品无码区| 免费jjzz在在线播放国产| jizz18免费视频| 亚洲最大的成网4438| 国产一卡2卡3卡4卡无卡免费视频| 亚洲精品456人成在线| 国产一区二区免费在线| a级毛片视频免费观看| 亚洲一区二区三区高清| 欧洲精品成人免费视频在线观看 | 久久青草亚洲AV无码麻豆| 24小时免费看片| 亚洲精品天堂无码中文字幕| 亚洲精品tv久久久久| 91在线老王精品免费播放| 亚洲精品无码少妇30P| 国产成人精品日本亚洲网站| 久久精品免费全国观看国产| 美女免费视频一区二区三区| 久久精品国产亚洲av四虎| 99re热免费精品视频观看| 人妻18毛片a级毛片免费看| 久久亚洲精品成人av无码网站| 成人人免费夜夜视频观看| jizz免费一区二区三区| 亚洲国产精品成人综合久久久| 国产乱色精品成人免费视频| 97在线视频免费| 一区二区三区免费在线观看| 亚洲国产av高清无码|