javascript轻量级库createjs使用Easel实现拖拽效果


Posted in Javascript onFebruary 19, 2016

我就把我学习Createjs的一些心得体会向大家分享下:

一.什么是CreateJS?

createjs是一个轻量级的javascript库,是一套可以构建丰富交互体验的 HTML5 游戏的开源工具包,利用createjs可以构建出许多有趣的动画游戏。例如围住神经猫,看你有多色等Html5游戏。

二.CreateJS有哪几款工具?

createjs里面共有四大引擎:

  • EaselJS:主要用于动画、向量及位图的绘制。提供支持移动设备触控的一系列方法(click、mousedown、pressup、pressmove分别为鼠标点击、按下、松开以及移动的事件,不过在之前要加上createjs.Touch.enable(<舞台对象>))。
  • TweenJS:是一个制作补间动画的引擎,可生成一种连续变化的效果。(用过flash的童鞋应该知道什么是补间动画哈)
  • SoundJS:是一个音频播放的引擎,可根据浏览器兼容性及性能选择音频格式播放,可随时加载和卸载。
  • PreloadJS:是一个资源预加载的引擎,还可以指定加载顺序及按优先级分组加载资源。

三.如何利用Easel制作一个简单的拖拽?

那么假如现在需要用EaselJs实现可任意拖拽一张图片,并通过单击该图片使图片处于选中或未选中状态,选中状态即为可拖拽状态,未选中状态即为不可拖拽状态。且最多有一张图片可以处于拖拽状态。那么如何利用EaselJs实现这个需求且支持移动端设备呢?废话不多说,上源码。

HTML代码:

<html>

<head>
  <meta charset="utf-8">
  <script src="https://code.createjs.com/easeljs-0.8.2.min.js"></script>
  <script type="text/javascript">
    function Init() {
      var canvas = document.getElementById("dragCanvas");
      canvas.width = 600; //定义画布大小
      canvas.height = 400;
      var stage = new createjs.Stage(canvas);
      createjs.Touch.enable(stage); //允许设备触控
      var selectBool = []; //控制状态
      drawImgs();
      stage.update();

      function drawImgs() {
        var oX = 0,
          oY = 0;
        var fzmx, fzmy, sx, sy; //辅助变量
        for (var i = 0; i < 4; i++) {
          var randomColor = Math.floor(Math.random() * 16777215).toString(16);
          var con = new createjs.Container();
          var bitmap = new createjs.Bitmap(i + '.jpg');
          selectBool[i] = false;
          con.x = oX;
          con.y = oY;
          oX += 125;
          con.addChild(bitmap);
          con.addEventListener("mousedown", function (event) {
            var Mindex = stage.getChildIndex(event.target.parent);
            sx = event.stageX;
            sy = event.stageY;
            fzmx = event.stageX - event.target.parent.x;
            fzmy = event.stageY - event.target.parent.y;
            if (selectBool[Mindex]) {
              event.target.parent.addEventListener('pressmove', pressMove, false);
            } else {
              event.target.parent.removeEventListener('pressmove', pressMove, false);
            }
            stage.update();
          });
          //        添加鼠标"松开"事件
          con.addEventListener("pressup", function (event) {
            var Pindex = stage.getChildIndex(event.target.parent);
            if (Math.abs(event.stageX - sx) < 3 && Math.abs(event.stageY - sy) < 3) {
              selectBool[Pindex] = !selectBool[Pindex];
              shadowUr(selectBool[Pindex], event.target.parent, randomColor);
            }
            stage.update();
          });

          //        切换状态方法
          function shadowUr(bool, con, randomColor) {
            if (bool) {
              con.shadow = new createjs.Shadow("#" + randomColor, 0, 0, 10);
              var fIndex = con.parent.getChildIndex(con);
              for (var i = 0; i < con.parent.numChildren; i++) {
                if (i == fIndex)
                  continue;
                con.parent.getChildAt(i).shadow = null;
                selectBool[i] = false;
              }
            } else
              con.shadow = null;
          }
          //        图片拖动
          function pressMove(event) {
            var self = event.target.parent;
            if (event.stageX - fzmx < 0)
              self.x = 0;
            else if (event.stageX - fzmx + self.getBounds().width > stage.canvas.width)
              self.x = stage.canvas.width - self.getBounds().width;
            else
              self.x = event.stageX - fzmx;
            if (event.stageY - fzmy < 0)
              self.y = 0;
            else if (event.stageY - fzmy + self.getBounds().height > stage.canvas.height)
              self.y = stage.canvas.height - self.getBounds().height;
            else
              self.y = event.stageY - fzmy;
            stage.update();
          }
          stage.addChild(con);
        }

      }
    }
  </script>
</head>

<body onload="Init();">
  <canvas id="dragCanvas" style="border:#333 1px solid"></canvas>
</body>

</html>

由于浏览器的同源策略,需要开一个本地服务器,否则无法正常加载。好了,这就是上述所要求的图片拖拽效果啦

Javascript 相关文章推荐
取得父标签
Nov 14 Javascript
javascript与asp.net(c#)互相调用方法
Dec 13 Javascript
Textarea与懒惰渲染实现代码
Jan 04 Javascript
JQuery实现简单时尚快捷的气泡提示插件
Dec 20 Javascript
jQuery实现hover合成事件的方法
Aug 06 Javascript
js密码强度校验
Nov 10 Javascript
学习JavaScript设计模式(策略模式)
Nov 26 Javascript
js针对ip地址、子网掩码、网关的逻辑性判断
Jan 06 Javascript
JavaScript职责链模式概述
Sep 17 Javascript
jQuery中值得注意的trigger方法浅析
Dec 12 Javascript
js获取form表单中name属性的值
Feb 27 Javascript
Vue编程式跳转的实例代码详解
Jul 10 Javascript
jQuery fancybox在ie浏览器下无法显示关闭按钮的解决办法
Feb 19 #Javascript
谈一谈javascript中继承的多种方式
Feb 19 #Javascript
多种js图片预加载实现方式分享
Feb 19 #Javascript
JS实现1000以内被3或5整除的数字之和
Feb 18 #Javascript
ECharts仪表盘实例代码(附源码下载)
Feb 18 #Javascript
基于jQuery实现仿搜狐辩论投票动画代码(附源码下载)
Feb 18 #Javascript
用canvas 实现个图片三角化(LOW POLY)效果
Feb 18 #Javascript
You might like
php 攻击方法之谈php+mysql注射语句构造
2009/10/30 PHP
PHP 图片上传实现代码 带详细注释
2010/04/29 PHP
php学习之运算符相关概念
2011/06/09 PHP
PHP中单例模式与工厂模式详解
2017/02/17 PHP
jquery拖动插件(jquery.drag)使用介绍
2013/06/18 Javascript
使用js修改客户端注册表的方法
2013/08/09 Javascript
JS交换变量的方法
2015/01/21 Javascript
JavaScript实现点击单选按钮改变输入框中文本域内容的方法
2015/08/12 Javascript
Bootstrap按钮组件详解
2016/04/26 Javascript
JS实现的跨浏览器解析XML文件实例
2016/06/21 Javascript
jquery validate表单验证插件
2016/09/06 Javascript
jQuery 检查某个元素在页面上是否存在实例代码
2016/10/27 Javascript
bootstrap table表格插件使用详解
2017/05/08 Javascript
React-Native做一个文本输入框组件的实现代码
2017/08/10 Javascript
解决layui checkbox 提交多个值的问题
2019/09/02 Javascript
vue实现表单录入小案例
2019/09/27 Javascript
vue中使用腾讯云Im的示例
2020/10/23 Javascript
vue element-ul实现展开和收起功能的实例代码
2020/11/25 Vue.js
Vue实现省市区三级联动
2020/12/27 Vue.js
[44:50]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第二局
2016/02/26 DOTA
Python中的zip函数使用示例
2015/01/29 Python
使用python实现rsa算法代码
2016/02/17 Python
Python实现二分查找与bisect模块详解
2017/01/13 Python
Python使用Scrapy爬虫框架全站爬取图片并保存本地的实现代码
2018/03/04 Python
Python内置函数reversed()用法分析
2018/03/20 Python
python破解zip加密文件的方法
2018/05/31 Python
Python爬取个人微信朋友信息操作示例
2018/08/03 Python
python 实现从高分辨图像上抠取图像块
2020/01/02 Python
flask框架渲染Jinja模板与传入模板变量操作详解
2020/01/25 Python
大学生学业生涯规划
2014/01/05 职场文书
大学毕业生个人自荐信范文
2014/01/08 职场文书
爱情检讨书大全
2014/01/21 职场文书
班级体育活动总结
2014/07/05 职场文书
专题民主生活会对照检查材料思想汇报
2014/09/29 职场文书
北京导游词
2015/02/12 职场文书
《确定位置》教学反思
2016/02/18 职场文书