zoukankan      html  css  js  c++  java
  • 《转》 头像上传编辑的处理思路

    最近很多人遇到这些问题,我就分享一下个人做这些东西时候的经验吧,有不妥之处欢迎拍砖。

    分几个技术点来说吧:

    1.图片上传,主要是fileReference类,这是上传本地的图片。相关用法查API即可。

    2.要想预览的话用fileReference.data,注意,此时SDK版本要高于3.2

    3.有时候要截屏,这个主要用BitmapData.draw,示例函数如下   //快照功能函数 private function getBitmapData(target:UIComponent):BitmapData {  var bd:BitmapData=new BitmapData(target.width, target.height);  var m:Matrix=new Matrix();  bd.draw(target, m);  return bd; }

        然后用实例一个Bitmap(bd)就可以赋值给image.source了,当然还有其他的截屏方法,比如导入mx.graphics.ImageSnapshot;用ImageSnapshot.captureBitmapData(UIComponent)

    4.拖拽嘛,类库里是提供了个StartDrag和stopDrag,不过那个能做的功能很有限,在拖拽的过程中要进行些逻辑判断就显得很乏力,我个人的经验是这样的。

    首先,监听mouseDown,在mouseDown的时候再监听mouseMove和mouseUp;

    然后,在mouseMove中可以自己写拖拽逻辑,很灵活,比如拖拽组件A,组件B可以跟随等等,设置拖拽边界也在这里进行;

    最后,在mouseUp中remove以上监听函数。

    当然有些人在mouseDown之前还用了一下mouseOver,这可以扩展更多的东西,做出更帅的拖拽体验。

    建议这种东西写个类,以便复用,还有如果一个组件里面的元件比较多,也可以用拖拽位图的方式来优化一下,可以提高性能。在拖拽之前做个快照,然后组件设置为不可见,拖拽的其实只是张位图,然后拖拽完成之后,再把组件摆到相应位置,同时设置为可见。这个代码比较多就不贴了,了解思路就能做出来了。

    5.拖拽加缩放,这个一般用第三方库,ObjectHandler个人认为比较不错。当然也可以自己写一个类,思路是差不多的,先写个Dot类,再写个DragBox类,拖拽思路还是mouseOver,mouseDown,mouseMove,mouseUp,适时的add和remove监听器,然后注意下用户体验,比如鼠标不能总是箭头吧或者拖拽的时候加点滤镜。或者增加点额外功能,比如拖拽点的数量,是否设置拖拽时长和宽的比例,加上这些东西复用性就更强了。

    其实这些功能上的东西并不是特别难搞定,重要的还是设计出好的用户体验,想把这些技术综合应用的朋友一般都是想做头像上传功能组件吧。人人网和开心网上做的感觉用户体验就不是很好,白社会做的还是蛮犀利的,当然白是后出来的,现在后出来的都越来越好,听说QQ有个应用上的头像上传增加了人脸识别,那就更强大了。。。

    as3.0中的事件冒泡机制有时候会很烦人,比如一个Sprite(方便下文描述就命名为Container吧)把另一外Sprite(称为Child吧)做为子元素套进来以后,如果两个Sprite都注册了Mouse_Down事件,要想在Child上点击鼠标时系统只响应Child的Mouse_Down事件,默认是不行的,因为事件冒泡会让Container也响应Mouse_Down事件.
    要想阻止事件冒泡,可以在鼠标事件处理函数中调用e.stopImmediatePropagation()或stopPropagation()方法,即:
    private function subChildMouseDownHandler(e:MouseEvent):void{
        e.stopImmediatePropagation();
        //或
        //e.stopPropagation();
        trace("_sub_child.MOUSE_DOWN");
    }

    官方的解释:

    stopImmediatePropagation():void
    防止对事件流中当前节点中所有后续节点中的事件侦听器进行处理。 

    stopPropagation():void
    防止对事件流中当前节点后续节点中的所有事件侦听器进行处理。

    小结:如果某对象的一个事件同时添加多个监听,stopPropagation将把该事件注册的所有监听处理函数执行完后,再阻止该事件继续向上冒泡;而stopImmediatePropagation方法将本次处理函数执行完后就立即阻止事件继续向上冒泡(即同一事件的其它监听函数将不会执行)。
     
     
     
  • 相关阅读:
    百度云 shadow-root 内的video 倍速播放
    记一次临摹百度登录界面
    es6 函数的扩展
    01-let和const.html
    selenium 禁止加载图片 css js
    前端小知识(11)--js数组方法
    前端小知识(10)--js深拷贝
    算法系列(1)--广度优先遍历和深度优先遍历
    前端小知识(9)--选择器
    前端小知识(8)--BFC
  • 原文地址:https://www.cnblogs.com/regalys168/p/3713073.html
Copyright © 2011-2022 走看看