元素拖拽

/*
 * touchScroll  
 * param:el,evt
 * evt:{start:function(){},move:function(){},end:function(){}}
*/

(function(window,document,undefined){
    var hasTouch = 'ontouchstart' in window,
        hasPointer= navigator.msPointerEnabled,
        winW = document.body.clientWidth,
        winH = document.body.clientHeight;
        
    function Translate(el,evt){ 
        this.content = typeof el == 'string' ? document.getElementById(el) : el;
        this.wrapper = document.getElementById('previewContent');
        this.point={x:0,y:0,endX:0,endY:0}
        this.result = {x:0,y:0}
        this.evt = evt;
        this.initEvents();
        var _this=this;
        this.content.onload = function(){
            _this.imgHeight=this.height;
        }
        this.previewContentHeight = parseInt($('#previewContent').css('height'));
        this.bordersWidth=parseInt($('#border').css('height'));
    }

    Translate.prototype = {
        initEvents: function (remove) {
            var eventType = remove ? this.removeEvent : this.addEvent;
            eventType(window, 'orientationchange', this);
            eventType(window, 'resize', this);
            
            /*PC*/
            eventType(this.wrapper, 'mousedown', this);
            eventType(window, 'mousemove', this);
            eventType(window, 'mousecancel', this);
            eventType(window, 'mouseup', this);

            /*windows phone*/
            if ( hasPointer ) {
                eventType(this.wrapper, 'MSPointerDown', this);
                eventType(window, 'MSPointerMove', this);
                eventType(window, 'MSPointerCancel', this);
                eventType(window, 'MSPointerUp', this);
            }
            /*IOS android*/
            if ( hasTouch ) {
                eventType(this.wrapper, 'touchstart', this);
                eventType(window, 'touchmove', this);
                eventType(window, 'touchcancel', this);
                eventType(window, 'touchend', this);
            }
            eventType(this.wrapper, 'transitionend', this);
            eventType(this.wrapper, 'webkitTransitionEnd', this);
            eventType(this.wrapper, 'oTransitionEnd', this);
            eventType(this.wrapper, 'MSTransitionEnd', this);
            
        },
        start:function(e){
            var touches = e.touches ? e.touches[0] : e;
            this.point.y  = touches.pageY;
            this.enabled=true;//是否可以移动
            //console.log(0,this.point);
            e.stopPropagation();
            if(typeof this.evt.start == 'function') this.evt.start(this);
        },
        move:function(e){
            e.preventDefault();
            e.stopPropagation();
            if(!this.enabled) return false;
            var touches = e.touches ? e.touches[0] : e,
                diffY = parseInt(touches.pageY - this.point.y);
            this.point.endY = this.result.y+diffY;
            this.point.endY = this.result.y+diffY;
            //console.log(this.point.endY,this.result.y,diffY)
            /*if(this.point.endY>=0 || (this.imgHeight+this.point.endY)<this.previewContentHeight){
                //this.point.endY =0;
                return;
            }*/
            if(this.point.endY>=0){
                this.point.endY =0;
                return;
            }
            if((this.imgHeight+this.point.endY)<this.previewContentHeight){
            	 this.point.endY=this.previewContentHeight-this.imgHeight;
            }
            this.moveXY(this.point);
            if(typeof this.evt.move == 'function') this.evt.move(this);
        },
        end:function(e){    
            this.enabled = true;
            this.result.y = this.point.endY;
            
            if(typeof this.evt.end == 'function') this.evt.end(this);
        },
        transitionEnd:function(){
            //CSS动画结束时操作
        },
        moveXY:function(point){
            //this.content.style.left = point.endX+'px';
            //if(this.imgHeight-Math.abs(point.endY)<this.previewContentHeight) 
            this.content.style.top = point.endY+'px';

        },
        handleEvent: function (e) {
            switch ( e.type ) {
                case 'touchstart':
                case 'MSPointerDown':
                case 'mousedown':
                    this.start(e);
                    break;
                case 'touchmove':
                case 'MSPointerMove':
                case 'mousemove':
                    this.move(e);
                    break;
                case 'touchend':
                case 'MSPointerUp':
                case 'mouseup':
                case 'touchcancel':
                case 'MSPointerCancel':
                case 'mousecancel':
                    this.end(e);
                    break;
                case 'transitionend':
                case 'webkitTransitionEnd':
                case 'oTransitionEnd':
                case 'MSTransitionEnd':
                    this.transitionEnd(e);
                    break;
                case 'DOMMouseScroll':
                case 'mousewheel':
                    //this._wheel(e);
                    break;
                case 'keydown':
                    //this._key(e);
                    break;
            }
        },
        destroy: function () {
            this._initEvents(true);
        },
        addEvent:function (el, type, fn, capture) {
            el.addEventListener(type, fn, !!capture);
        },
        removeEvent:function (el, type, fn, capture) {
            el.removeEventListener(type, fn, !!capture);
        }
    }
    window.Translate = Translate;
})(window,document);

滑动,兼容了pc wp,但是主要更适用于Android IOS。

对象的初始化

new Translate('element',{
        start:function(){

        },
        end:function(scroll){
            
        }
     });

文件上传

 var fileElem = document.getElementById('file');
          fileElem.onchange = function startRead() {  
          // obtain input element through DOM 
          var file = fileElem.files[0];
          if(file){
            console.log(file);
            getAsText(file);
          }
        }

        function getAsText(readFile) {
                
          var reader = new FileReader();
          
          // Read file into memory as UTF-16      
          reader.readAsText(readFile, "UTF-16");
          
          // Handle progress, success, and errors
          reader.onprogress = updateProgress;
          reader.onload = loaded;
          reader.onerror = errorHandler;
        }

        function updateProgress(evt) {
          if (evt.lengthComputable) {
            // evt.loaded and evt.total are ProgressEvent properties
            var loaded = (evt.loaded / evt.total);
            if (loaded < 1) {
              // Increase the prog bar length
              // style.width = (loaded * 200) + "px";
            }
          }
        }

        function loaded(evt) {  
          // Obtain the read file data    
          var fileString = evt.target.result;
          console.log(fileString);
          // Handle UTF-16 file dump
          if(utils.regexp.isChinese(fileString)) {
            //Chinese Characters + Name validation
          }
          else {
            // run other charset test
          }
          // xhr.send(fileString)     
        }

        function errorHandler(evt) {
          if(evt.target.error.name == "NotReadableError") {
            // The file could not be read
          }
        }

参考链接  http://www.w3.org/TR/FileAPI/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值