avalonjs实现仿微博的图片拖动特效


Posted in Javascript onMay 06, 2015

效果:

avalonjs实现仿微博的图片拖动特效

HTML:

<div id='post_img' ms-controller='post_img'>
   <ul id='post_img_inner' ms-mousemove='onmousemove'>
    <li ms-repeat-el="post_img_list" class='inline-block' ms-mousedown='onmousedown($event,$index,el)' ms-attr-id='post_img_item{{$index}}'>
      <img ms-src='el' class='uploaded_img'></li>
  </ul>
</div>

JS:

var drag_holder=null,index=-1,ori_src=null,drag_flag=false;//拖动的代理,原图片,原图片的src
var post_img = avalon.define('post_img', function(vm) {
  vm.post_img_list=[];//保存所有图片的src
  vm.onmousedown=function(e,i,el){
    $('drag_proxy').style.display='block';
    var target=e.target.parentNode;
    var xx = e.clientX; 
    var yy = e.clientY;
    $('drag_proxy').style.top=yy+'px';
    $('drag_proxy').style.left=xx+'px';
    if(target&&target.nodeName=='LI'){
      ori_src=el;
      index=target.getAttribute('id').substring(13);
      $('drag_proxy').innerHTML=target.innerHTML;
      post_img.post_img_list.splice(i, 1, 'about:blank');
    }
    drag_flag=true;
  }; 
  vm.onmousemove=function(e){
    if(drag_flag){//如果点下了图片
      var xx = e.clientX; 
      var yy = e.clientY; 
      $('drag_proxy').style.top=yy+'px';
      $('drag_proxy').style.left=xx+'px';
      var x=xx-avalon($('post_img')).offset().left;
      var y=yy-avalon($('post_img')).offset().top;
      //例子没有考虑滚动条的情况
      var x_index=Math.floor(x/100);//图片尺寸100*100
      var y_index=Math.floor(y/100);
      post_img.post_img_list.splice(index, 1);//删除当前图片的li
      var target_index=3*y_index+x_index;//目标图片的位置(3*3)
      if(post_img.post_img_list.indexOf('about:blank')!=target_index)
      //如果图片数组中没有src=about:blank这个占位置的li
        post_img.post_img_list.splice(target_index, 0, 'about:blank');
        //添加src=about:blank
      index=target_index;
      //会触发很多次move,所以触发一次就改动一次
    }
  };
});
document.onmouseup=function(e){
  drag_holder=null;
  if(ori_src){
    post_img.post_img_list.splice(index, 1);
    //删除src=about:blank
    post_img.post_img_list.splice(index, 0,ori_src);
    //添加原图片
  }
  $('drag_proxy').style.display='none';
  $('drag_proxy').innerHTML='';
  drag_flag=false;
};

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
jquery触发a标签跳转事件示例代码
Jul 21 Javascript
jquery.ajax的url中传递中文乱码问题的解决方法
Feb 07 Javascript
jquery uploadify 在FF下无效的解决办法
Sep 26 Javascript
Javascript 字符串模板的简单实现
Feb 13 Javascript
jQuery实现的自定义滚动条实例详解
Sep 20 Javascript
原生js和css实现图片轮播效果
Feb 07 Javascript
微信小程序开发之麦克风动画 帧动画 放大 淡出
Apr 18 Javascript
webpack打包js的方法
Mar 12 Javascript
详解Vue中CSS样式穿透问题
Sep 12 Javascript
微信小程序跳转到其他网页(外部链接)的实现方法
Sep 20 Javascript
angular8和ngrx8结合使用的步骤介绍
Dec 01 Javascript
js 数组 fill() 填充方法
Nov 02 Javascript
avalonjs制作响应式瀑布流特效
May 06 #Javascript
javascript实现简单的html5视频播放器
May 06 #Javascript
js实现的四级左侧网站分类菜单实例
May 06 #Javascript
wangEditor编辑器失去焦点后仍然可以在原位置插入图片分析
May 06 #Javascript
完美实现仿QQ空间评论回复特效
May 06 #Javascript
jQuery实现鼠标单击网页文字后在文本框显示的方法
May 06 #Javascript
js实现点击按钮后给Div图层设置随机背景颜色的方法
May 06 #Javascript
You might like
dedecms防止FCK乱格式化你的代码的修改方法
2007/03/17 PHP
php获取301跳转URL简单实例
2013/12/16 PHP
浅谈PHP中类和对象的相关函数
2017/04/26 PHP
PHP简单装饰器模式实现与用法示例
2017/06/22 PHP
PHP机器学习库php-ml的简单测试和使用方法
2017/07/14 PHP
JS实现点击颜色块切换指定区域背景颜色的方法
2015/02/25 Javascript
Jquery插件实现点击获取验证码后60秒内禁止重新获取
2015/03/13 Javascript
javascript中call apply 的应用场景
2015/04/16 Javascript
JavaScript中String.match()方法的使用详解
2015/06/06 Javascript
Java遍历集合方法分析(实现原理、算法性能、适用场合)
2016/04/25 Javascript
Bootstrap中的Panel和Table全面解析
2016/06/13 Javascript
js获取Get值的方法
2016/09/29 Javascript
Javascript实现汉字和拼音互转的终极方案
2016/10/19 Javascript
jquery判断页面网址是否有效的两种方法
2016/12/11 Javascript
javascript实现将数字转成千分位的方法小结【5种方式】
2016/12/11 Javascript
详解AngularJS ui-sref的简单使用
2017/04/24 Javascript
Nodejs调用WebService的示例代码
2017/09/29 NodeJs
微信小程序视图容器(swiper)组件创建轮播图
2020/06/19 Javascript
vuejs2.0运用原生js实现简单拖拽元素功能
2020/08/21 Javascript
JS实现的A*寻路算法详解
2018/12/14 Javascript
ES6的异步终极解决方案分享
2019/07/11 Javascript
[48:56]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 VG vs KG
2018/03/31 DOTA
[01:03:41]完美世界DOTA2联赛PWL S3 DLG vs Phoenix 第一场 12.17
2020/12/19 DOTA
python中使用sys模板和logging模块获取行号和函数名的方法
2014/04/15 Python
python中常用的九种预处理方法分享
2016/09/11 Python
python对json的相关操作实例详解
2017/01/04 Python
python3利用venv配置虚拟环境及过程中的小问题小结
2018/08/01 Python
python进程池实现的多进程文件夹copy器完整示例
2019/11/27 Python
tensorflow 实现数据类型转换
2020/02/17 Python
jupyter 导入csv文件方式
2020/04/21 Python
英国花园家具中心:Garden Furniture Centre
2017/08/24 全球购物
美国LOGO设计公司:The Logo Company
2018/07/16 全球购物
韩国商务邀请函
2014/01/14 职场文书
小学庆六一活动方案
2014/02/28 职场文书
运动会报道稿300字
2014/10/02 职场文书
深入浅析Django MTV模式
2021/09/04 Python