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 相关文章推荐
[原创]图片分页查看
Aug 28 Javascript
半角全角相互转换的js函数
Oct 16 Javascript
javascript中的Function.prototye.bind
Jun 25 Javascript
学习Angularjs分页指令
Jul 01 Javascript
Summernote实现图片上传功能的简单方法
Jul 11 Javascript
简单模拟node.js中require的加载机制
Oct 27 Javascript
jQuery弹出窗口打开链接的实现代码
Dec 24 Javascript
ES6新特性之Object的变化分析
Mar 31 Javascript
JS学习笔记之闭包小案例分析
May 29 Javascript
详解JavaScript 浮点数运算的精度问题
Jul 23 Javascript
js简单实现自动生成表格功能示例
Jun 02 Javascript
在react项目中使用antd的form组件,动态设置input框的值
Oct 24 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页面间传递参数实例代码
2008/06/05 PHP
php获取四位字母和数字的随机数的实现方法
2015/01/09 PHP
php编写批量生成不重复的卡号密码代码
2015/05/14 PHP
浅谈php中include文件变量作用域
2015/06/18 PHP
PHP的Yii框架的基本使用示例
2015/08/21 PHP
PHP+MySQL实现输入页码跳转到指定页面功能示例
2018/06/01 PHP
什么是PHP7中的孤儿进程与僵尸进程
2019/04/14 PHP
驱动事件的addEvent.js代码
2007/03/27 Javascript
jquery中的sortable排序之后的保存状态的解决方法
2010/01/28 Javascript
详解JavaScript中shift()方法的使用
2015/06/09 Javascript
jQuery自定义滚动条完整实例
2016/01/08 Javascript
酷! 不同风格页面布局幻灯片特效js实现
2021/02/19 Javascript
nodejs多版本管理总结
2018/04/03 NodeJs
vue项目部署上线遇到的问题及解决方法
2018/06/10 Javascript
iview的table组件自带的过滤器实现
2019/07/12 Javascript
js实现网页版贪吃蛇游戏
2020/02/22 Javascript
Python多进程同步Lock、Semaphore、Event实例
2014/11/21 Python
python用户评论标签匹配的解决方法
2018/05/31 Python
Python 爬虫之Beautiful Soup模块使用指南
2018/07/05 Python
关于不懂Chromedriver如何配置环境变量问题解决方法
2019/06/12 Python
Django 外键的使用方法详解
2019/07/19 Python
Python编译为二进制so可执行文件实例
2019/12/23 Python
python开发实例之Python的Twisted框架中Deferred对象的详细用法与实例
2020/03/19 Python
在pycharm中debug 实时查看数据操作(交互式)
2020/06/09 Python
详解Python设计模式之策略模式
2020/06/15 Python
python使用建议与技巧分享(一)
2020/08/17 Python
python 获取字典键值对的实现
2020/11/12 Python
Python 实现进度条的六种方式
2021/01/06 Python
物流专业毕业生推荐信范文
2013/11/18 职场文书
元旦获奖感言
2014/03/08 职场文书
酒店员工培训方案
2014/06/02 职场文书
小学生放飞梦想演讲稿
2014/08/26 职场文书
劳模事迹材料范文
2014/12/24 职场文书
法律意见书范文
2015/05/20 职场文书
田径运动会广播稿
2015/08/19 职场文书
一文搞懂python异常处理、模块与包
2021/06/26 Python