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 相关文章推荐
纯javascript实现的小游戏《Flappy Pig》实例
Jul 27 Javascript
jQuery simplePage+AJAX plus分页插件用法实例
Feb 17 Javascript
js+flash实现的5图变换效果广告代码(附演示与demo源码下载)
Apr 01 Javascript
jQuery插件扩展测试实例
Jun 21 Javascript
Node.js的Mongodb使用实例
Dec 30 Javascript
教你用Cordova打包Vue项目的方法
Oct 17 Javascript
详解plotly.js 绘图库入门使用教程
Feb 23 Javascript
angularJs 表格添加删除修改查询方法
Feb 27 Javascript
微信头像地址失效踩坑记附带解决方案
Sep 23 Javascript
Openlayers绘制聚合标注
Sep 28 Javascript
JavaScript实现音乐导航效果
Nov 19 Javascript
ant design charts 获取后端接口数据展示
May 25 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
tagName的使用,留一笔
2006/06/26 Javascript
URI、URL和URN之间的区别与联系
2006/12/20 Javascript
一些常用的Javascript函数
2006/12/22 Javascript
深入探寻seajs的模块化与加载方式
2015/04/14 Javascript
JS动态添加iframe的代码
2015/09/14 Javascript
使用jquery提交form表单并自定义action的实现代码
2016/05/25 Javascript
js实现抽奖效果
2017/03/27 Javascript
JavaScript设计模式之代理模式详解
2017/06/09 Javascript
MUI顶部选项卡的用法(tab-top-webview-main)详解
2017/10/08 Javascript
nodejs中art-template模板语法的引入及冲突解决方案
2017/11/07 NodeJs
微信小程序实现长按删除图片的示例
2018/05/18 Javascript
React父子组件间的传值的方法
2018/11/13 Javascript
浅谈webpack性能榨汁机(打包速度优化)
2019/01/09 Javascript
vue 使用高德地图vue-amap组件过程解析
2019/09/07 Javascript
微信小程序之高德地图多点路线规划过程示例详解
2021/01/18 Javascript
[01:44]Ti10举办地公布
2019/08/25 DOTA
Python使用redis pool的一种单例实现方式
2016/04/16 Python
PyQt5每天必学之单行文本框
2018/04/19 Python
Python实现按逗号分隔列表的方法
2018/10/23 Python
python实现文件的分割与合并
2019/08/29 Python
Python从列表推导到zip()函数的5种技巧总结
2019/10/23 Python
css3实例教程 一款纯css3实现的环形导航菜单
2014/10/20 HTML / CSS
HTML5 input元素类型:email及url介绍
2013/08/13 HTML / CSS
解释一下Windows的消息机制
2014/01/30 面试题
SQL Server 2000数据库的文件有哪些,分别进行描述
2013/03/30 面试题
CSMA/CD介质访问控制协议
2015/11/17 面试题
说一下Linux下有关用户和组管理的命令
2014/08/18 面试题
教师实习的自我鉴定
2013/10/26 职场文书
前台接待的工作职责
2013/11/21 职场文书
财务主管岗位职责
2014/02/28 职场文书
村级个人对照检查材料
2014/08/22 职场文书
小班上学期幼儿评语
2014/12/30 职场文书
小班下学期个人总结
2015/02/12 职场文书
地球一小时活动总结
2015/02/27 职场文书
JavaScript利用html5新方法操作元素类名详解
2021/11/27 Javascript
mysql函数之截取字符串的实现
2022/08/14 MySQL