pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

canvas 實現 github404動態效果的示例代碼

本篇文章主要介紹了canvas 實現 github404動態效果的示例代碼,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

前幾天使用css樣式和js致敬了一下github404的類似界面,同時最近又接觸了canvas,本著瞎折騰的想法,便借著之前的js的算法,使用canvas來完成了github404的動態效果。

效果圖

canvas 實現 github404動態效果的示例代碼

文件目錄

canvas 實現 github404動態效果的示例代碼

文件資源

文件源碼與圖片在文章末尾給出

代碼

網頁的body部分

這里給canvas 定義好寬和高,設為塊級元素。這些img 標簽是將這些圖片加載出來,我們就不用在js中去加載了,再將圖片設為不顯示 display:none。

<body>
    <canvas id="mycanvas" width="1680" height="630"
        style="margin:0;display:block">
            您的瀏覽器不支持canvas
    </canvas>
    <img src="./images/field.png" style="display:none">
    <img src="./images/text.png" style="display:none">
    <img src="./images/cat.png" style="display:none">
    <img src="./images/cat_shadow.png" style="display:none">
    <img src="./images/speeder.png" style="display:none">                        
    <img src="./images/speeder_shadow.png" style="display:none">            
    <img src="./images/buliding_1.png" style="display:none">
    <img src="./images/building_2.png" style="display:none">  
 </body>

js部分

1.這里我還是新建了一個名為github404的json對象,以對所有的參數和方法進行封裝

2.再創建imgData的對象,將所有的img所需的參數傳入ps:top和left用于 drawImage() 方法時定位, scale 參數用于計算鼠標移動時對應的圖片移動的計算

3.init()方法用來初始化,是與外部的接口

4.畫圖方法的實現就是用 for in 循環遍歷 imgData[],再依次賦值,最后用drawImage()方法繪畫,只是在移動的繪圖方法中,需要注意使用了ctx.clearRect() 方法先將畫布清空。

<script>
        var github404 = {
            imgData: {//將所有圖片的信息用json對象記錄
                bg: {
                    top: 0,
                    left: 110,//top和left用于定位,在畫圖時使用
                    src: './images/field.png',//對應圖片路徑
                    scale: 0.06,//鼠標移動時,該圖片所對應移動的比例
                },
                building_2: {
                    top: 133,
                    left: 1182,
                    src: './images/building_2.png',
                    scale: 0.05,
                },
                building_1: {
                    top: 79,
                    left: 884,
                    src: './images/buliding_1.png',
                    scale: 0.03,
                },
                speeder_shadow: {
                    top: 261,
                    left: 776,
                    src: './images/speeder_shadow.png',
                    scale: 0.01,
                },
                cat_shadow: {
                    top: 288,
                    left: 667,
                    src: './images/cat_shadow.png',
                    scale: 0.02,
                },
                speeder: {
                    top: 146,
                    left: 777,
                    src: './images/speeder.png',
                    scale: 0.01,
                },
                cat: {
                    top: 88,
                    left: 656,
                    src: './images/cat.png',
                    scale: 0.05,
                },
                text: {
                    top: 70,
                    left: 364,
                    src: './images/text.png',
                    scale: 0.03,
                },
            },
            rate_w: 0,
            rate_h: 0,//偏移的比例
            field_width: 1680,
            field_height: 370,//背景高度和寬度
            canvas: document.querySelector('#mycanvas'),//獲得canvas元素

            init: function() {//初始化加載方法
                this.setRateWH();
                this.placeImg();
                this.attachMouseEvent();
            },
            setRateWH: function() {//計算偏移比的方法
                var window_width = document.body.clientWidth;
                var window_height = document.body.clientHeight;
                this.rate_w = this.field_width/window_width;
                this.rate_h = this.field_height/window_height;
            },

            placeImg: function() {//初始化的繪圖方法
                let ctx = this.canvas.getContext('2d');//獲得畫筆
                for(key in this.imgData){//遍歷imageData 對象
                    var image = new Image();
                    var left = this.imgData[key].left;
                    var top = this.imgData[key].top;    
                    image.src = this.imgData[key].src;
                    ctx.drawImage(image,left,top,
                        image.width,image.height);
                }

            },

            attachMouseEvent: function() {
                var that = this;
                document.body.onmousemove = function(e){
                    that.picMove(e.pageX,e.pageY);
                }
            },
            picMove: function(pageX,pageY) {//鼠標移動時重新畫圖的方法
                let ctx = this.canvas.getContext('2d');
                ctx.clearRect(0,0,this.canvas.width,this.canvas.height);
                for(key in this.imgData) {
                    var image = new Image();
                    var offer_w = this.rate_w * pageX * this.imgData[key].scale;
                var offer_h = this.rate_h * pageY * this.imgData[key].scale;
                    //定義 left和top,下面畫圖時給參數定位
                    var left = this.field_width/100 - offer_w + this.imgData[key].left; 
                    var top = this.field_height/100 - offer_h + this.imgData[key].top;
                    image.src = this.imgData[key].src;
                    ctx.drawImage(image,left,top,
                        image.width,image.height);
                }
            }
        }

        window.onload = function() {
            //只調用github404的init方法 封裝了數據
            github404.init();
        }
    </script>

總結

此次使用canvas來完成這個動態效果,使我更多的了解了canvas的用法。同時使我

對于使用json對象去封裝數據和方法,如何組織代碼都有了更深的一些了解。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持。

【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。

相關文檔推薦

本篇文章主要介紹了html5中canvas圖表實現柱狀圖的示例,本文使用canvas來實現一個圖表,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
本篇文章主要介紹了教你使用Canvas處理圖片的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
本篇文章主要介紹了Canvas與圖片壓縮的示例代碼,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
這篇文章主要介紹了基于HTML5 Canvas的3D動態Chart圖表的示例,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
本篇文章主要介紹了canvas之自定義頭像功能實現代碼示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本篇文章主要介紹了html5清空畫布方法(三種),小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
主站蜘蛛池模板: 电动车头盔厂家_赠品头盔_安全帽批发_山东摩托车头盔—临沂承福头盔 | 污水/卧式/潜水/钻井/矿用/大型/小型/泥浆泵,价格,参数,型号,厂家 - 安平县鼎千泵业制造厂 | 巩义市科瑞仪器有限公司| 德国EA可编程直流电源_电子负载,中国台湾固纬直流电源_交流电源-苏州展文电子科技有限公司 | 数码听觉统合训练系统-儿童感觉-早期言语评估与训练系统-北京鑫泰盛世科技发展有限公司 | 承插管件_不锈钢承插管件_锻钢高压管件-温州科正阀门管件有限公司 | 管形母线,全绝缘铜管母线厂家-山东佰特电气科技有限公司 | 光谱仪_积分球_分布光度计_灯具检测生产厂家_杭州松朗光电【官网】 | 奥运星-汽车性能网评-提供个性化汽车资讯 | 庭院灯_太阳能景观灯_草坪灯厂家_仿古壁灯-重庆恒投科技 | 排烟防火阀-消防排烟风机-正压送风口-厂家-价格-哪家好-德州鑫港旺通风设备有限公司 | 扬子叉车厂家_升降平台_电动搬运车|堆高车-扬子仓储叉车官网 | 欧洲MV日韩MV国产_人妻无码一区二区三区免费_少妇被 到高潮喷出白浆av_精品少妇自慰到喷水AV网站 | 常州企业采购平台_常州MRO采购公司_常州米孚机电设备有限公司 | 杰恒蠕动泵-蠕动泵专业厂家-19年专注蠕动泵 | 南京PVC快速门厂家南京快速卷帘门_南京pvc快速门_世界500强企业国内供应商_南京美高门业 | 台式恒温摇床价格_大容量恒温摇床厂家-上海量壹科学仪器有限公司 | 多功能干燥机,过滤洗涤干燥三合一设备-无锡市张华医药设备有限公司 | 细沙回收机-尾矿干排脱水筛设备-泥石分离机-建筑垃圾分拣机厂家-青州冠诚重工机械有限公司 | 陕西安玻璃自动感应门-自动重叠门-磁悬浮平开门厂家【捷申达门业】 | Safety light curtain|Belt Sway Switches|Pull Rope Switch|ultrasonic flaw detector-Shandong Zhuoxin Machinery Co., Ltd | 成都LED显示屏丨室内户外全彩led屏厂家方案报价_四川诺显科技 | 元拓建材集团官方网站| 涂层测厚仪_光泽度仪_uv能量计_紫外辐照计_太阳膜测试仪_透光率仪-林上科技 | 户外环保不锈钢垃圾桶_标识标牌制作_园林公园椅厂家_花箱定制-北京汇众环艺 | 细沙回收机-尾矿干排脱水筛设备-泥石分离机-建筑垃圾分拣机厂家-青州冠诚重工机械有限公司 | 大型果蔬切片机-水果冬瓜削皮机-洗菜机切菜机-肇庆市凤翔餐饮设备有限公司 | 复合土工膜厂家|hdpe防渗土工膜|复合防渗土工布|玻璃纤维|双向塑料土工格栅-安徽路建新材料有限公司 | 四川成都干燥设备_回转筒干燥机_脉冲除尘器_输送设备_热风炉_成都川工星科机电设备有限公司 | 工业洗衣机_工业洗涤设备_上海力净工业洗衣机厂家-洗涤设备首页 bkzzy在职研究生网 - 在职研究生招生信息咨询平台 | 打孔器,打孔钳厂家【温州新星德牌五金工具】 | 创客匠人-让IP变现不走弯路 | 气胀轴|气涨轴|安全夹头|安全卡盘|伺服纠偏系统厂家-天机传动 | 大通天成企业资质代办_承装修试电力设施许可证_增值电信业务经营许可证_无人机运营合格证_广播电视节目制作许可证 | 玉米深加工设备-玉米深加工机械-新型玉米工机械生产厂家-河南粮院机械制造有限公司 | 冷凝水循环试验箱-冷凝水试验箱-可编程高低温试验箱厂家-上海巨为(www.juweigroup.com) | 安徽泰科检测科技有限公司【官方网站】| 安徽泰科检测科技有限公司【官方网站】| 999范文网_优质范文下载写作帮手 | 真空乳化机-灌装封尾机-首页-温州精灌 | 威海防火彩钢板,威海岩棉复合板,威海彩钢瓦-文登区九龙岩棉复合板厂 |