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对象和DOM对象的相互转化实现代码
Mar 02 Javascript
跨浏览器的事件对象介绍
Jun 27 Javascript
JavaScript排序算法之希尔排序的2个实例
Apr 04 Javascript
D3.js封装文本实现自动换行和旋转平移等功能
Oct 14 Javascript
Javascript 创建类并动态添加属性及方法的简单实现
Oct 20 Javascript
jQuery实现两列等高并自适应高度
Dec 22 Javascript
Vue自定义指令使用方法详解
Aug 21 Javascript
vue地区选择组件教程详解
May 04 Javascript
JS获取当前时间的实例代码(昨天、今天、明天)
Nov 13 Javascript
vue 获取视频时长的实例代码
Aug 20 Javascript
vue父子组件的通信方法(实例详解)
Nov 10 Javascript
vue封装自定义指令之动态显示title操作(溢出显示,不溢出不显示)
Nov 12 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
浅析php变量修饰符static的使用
2013/06/28 PHP
PHP获取php,mysql,apche的版本信息示例代码
2014/01/16 PHP
PHP Reflection API详解
2015/05/12 PHP
为你总结一些php系统类函数
2015/10/21 PHP
学习thinkphp5.0验证类使用方法
2017/11/16 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
2019/10/16 PHP
js中opener与parent的区别详细解析
2014/01/14 Javascript
jquery实现点击弹出层效果的简单实例
2014/03/03 Javascript
js 实现浏览历史记录示例
2014/04/20 Javascript
js超时调用setTimeout和间歇调用setInterval实例分析
2015/01/28 Javascript
JavaScript DOM进阶方法
2015/04/13 Javascript
jQuery动画效果图片轮播特效
2016/01/12 Javascript
JavaScript 对象详细整理总结
2016/09/29 Javascript
Bootstrap源码解读媒体对象、列表组和面板(10)
2016/12/26 Javascript
MUI实现上拉加载和下拉刷新效果
2017/06/30 Javascript
微信小程序 跳转传递数据的实例
2017/07/06 Javascript
vue.js $refs和$emit 父子组件交互的方法
2017/12/20 Javascript
详解基于mpvue的小程序markdown适配解决方案
2018/05/08 Javascript
使用Vue.js 和Chart.js制作绚丽多彩的图表
2019/06/15 Javascript
JS实现简易留言板(节点操作)
2020/03/16 Javascript
js实现消灭星星(web简易版)
2020/03/24 Javascript
Python编写检测数据库SA用户的方法
2014/07/11 Python
在Python3中使用asyncio库进行快速数据抓取的教程
2015/04/02 Python
Python设计模式中单例模式的实现及在Tornado中的应用
2016/03/02 Python
python自动翻译实现方法
2016/05/28 Python
使用Python3+PyQT5+Pyserial 实现简单的串口工具方法
2019/02/13 Python
python代理工具mitmproxy使用指南
2019/07/04 Python
建筑安全生产责任书
2014/07/22 职场文书
企业公益活动策划方案
2014/08/24 职场文书
“六查”、“三学”、“三干”查摆问题整改措施
2014/09/27 职场文书
2014红色之旅心得体会
2014/10/07 职场文书
2015年党员公开承诺书范文
2015/01/22 职场文书
2015年幼儿园中班工作总结
2015/04/25 职场文书
银行工作心得体会范文
2016/01/23 职场文书
2019年家电促销广告语集锦
2019/10/21 职场文书
在 Golang 中实现 Cache::remember 方法详解
2021/03/30 Python