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+CSS 半开折叠效果原理及代码(自写)
Mar 04 Javascript
原生js操作checkbox用document.getElementById实现
Oct 12 Javascript
JavaScript中instanceof运算符的用法总结
Nov 19 Javascript
jQuery使用before()和after()在元素前后添加内容的方法
Mar 26 Javascript
javascript常用功能汇总
Jul 05 Javascript
微信小程序 教程之WXSS
Oct 18 Javascript
深入理解Angular4中的依赖注入
Jun 07 Javascript
Vue父子模版传值及组件传值的三种方法
Nov 27 Javascript
JS交互点击WKWebView中的图片实现预览效果
Jan 05 Javascript
Vue+Jwt+SpringBoot+Ldap完成登录认证的示例代码
May 21 Javascript
js canvas画布实现高斯模糊效果
Nov 27 Javascript
详解vuex数据传输的两种方式及this.$store undefined的解决办法
Aug 26 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
smarty中常用方法实例总结
2015/08/07 PHP
PHP页面跳转实现延时跳转的方法
2016/12/10 PHP
PHP+JavaScript实现无刷新上传图片
2017/02/21 PHP
String.prototype实现的一些javascript函数介绍
2013/11/22 Javascript
JavaScript获取当前页面上的指定对象示例代码
2014/02/28 Javascript
PHPMyAdmin导入时提示文件大小超出PHP限制的解决方法
2015/03/30 Javascript
SpringMVC restful 注解之@RequestBody进行json与object转换
2015/12/10 Javascript
使用struts2+Ajax+jquery验证用户名是否已被注册
2016/03/22 Javascript
浅谈js常用内置方法和对象
2016/09/24 Javascript
JS禁止查看网页源代码的实现方法
2016/10/12 Javascript
模板视图和AngularJS之间冲突的解决方法
2016/11/22 Javascript
js制作可以延时消失的菜单
2017/01/13 Javascript
vue.js源代码core scedule.js学习笔记
2017/07/03 Javascript
React 项目迁移 Webpack Babel7的实现
2018/09/12 Javascript
vue实现div拖拽互换位置
2020/07/29 Javascript
vue实现新闻展示页的步骤详解
2019/04/11 Javascript
前端天气插件tpwidget使用方法详解
2019/06/24 Javascript
基于vue+axios+lrz.js微信端图片压缩上传方法
2019/06/25 Javascript
js 判断当前时间是否处于某个一个时间段内
2019/09/19 Javascript
[32:26]EG vs IG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python中将函数赋值给变量时需要注意的一些问题
2017/08/18 Python
TensorFlow中权重的随机初始化的方法
2018/02/11 Python
Python处理命令行参数模块optpars用法实例分析
2018/05/31 Python
python 实现交换两个列表元素的位置示例
2019/06/26 Python
python分别打包出32位和64位应用程序
2020/02/18 Python
Pygame的程序开始示例代码
2020/05/07 Python
浅谈pymysql查询语句中带有in时传递参数的问题
2020/06/05 Python
如何避免常见的6种HTML5错误用法
2017/11/06 HTML / CSS
一家专门经营包包的英国网站:MyBag
2019/09/08 全球购物
荷兰家电购物网站:Expert.nl
2020/01/18 全球购物
出纳的岗位职责
2013/11/09 职场文书
企业员工爱岗敬业演讲稿
2014/08/26 职场文书
2015年护士长个人工作总结
2015/04/24 职场文书
苦儿流浪记读书笔记
2015/07/01 职场文书
我的中国梦心得体会范文
2016/01/05 职场文书
详细谈谈MYSQL中的COLLATE是什么
2021/06/11 MySQL