AngularJS仿苹果滑屏删除控件


Posted in Javascript onJanuary 18, 2016

AngularJs被用来开发单页面应用程序(SPA),利用AJAX调用配合页面的局部刷新,可以减少页面跳转,从而获得更好的用户体验。Angular的ngView及其对应的强大路由机制,是实现SPA应用的核心模块。本文所说的页面切换指的就是这个路由机制,即根据不同的url展示不同的视图。

前端开发中,为了对列表项进行快捷操作,有时就添个按钮来简单实现。但是,有时会发现按钮影响美观,甚至影响列表行的布局。稍在网上搜索无果,而写此仿苹果滑屏删除控件。

依赖项:angularJS、jQuery

测试浏览器:Chrome、IE11、手机浏览器

原先列表项代码:

<div class="row-class" ng-repeat="item in list">
这是整行显示的内容
</div>

开发目标:

<div class="row-class" ng-repeat="item in list" slide-delete text="删除" ondelete="ondelete(item)">
这是整行显示的内容
</div>

首先,要写个angular指令:

myapp.directive('slideDelete', function() {
return {
restrict: 'AE',
scope: {
text: "@",
ondelete: "&"
},
link: function (scope, element, attrs) {
var w = $(element).outerWidth ();//应显示的宽度
var h = $(element).outerHeight();//应显示的高度
//按钮宽度
var btn_w = 60;
//设计按钮:
scope.btn = $('<div style="position:absolute;z-index:5998;right:0;top:0;width:'+btn_w+'px;height:'+h+'px;color:#fff;background-color:#900;text-align:center;padding-top:10px">'+(scope.text||'删除')+'</div>');
//改造行,用一个绝对定位div将内容包裹起来
$(element).contents().wrapAll('<div new_box style="position:absolute;z-index:5999;left:0;top:0;width:'+w+'px;height:'+h+'px;background-color:#fff;"></div>');
//添加按钮:
$(element).css({overflow:"hidden", position:"relative", "z-index":5999}).append(scope.btn)
//滑屏功能
.slideable({
getLeft: function(self){return self.children(":first-child").position().left;},
setLeft: function(self, x){ self.children(":first-child").css({left: x<-btn_w && -btn_w || x<0 && x || 0});},
onslide: function(self, x){
scope.open = x < -btn_w / 2;
self.css("z-index", scope.open && 6001 || 5999);
//背景,点击收起
var bk = $.fixedBackground(6000, scope.open);
scope.open && bk.data("self", self).click(function(){
var self = bk.data("self");
$.fixedBackground(6000, false);
self && self.css("z-index", 5999).children(":first-child").animate({left: 0},100);
});
self.children(":first-child").animate({left: scope.open ? -btn_w : 0},100);
}
})
//按钮事件
scope.btn.click(function(){
scope.ondelete && scope.ondelete();
$.fixedBackground(6000, 1).click();//关闭背景
});
}
};
});

再写个滑屏事件类,当然要兼容鼠标

(function($){
$.fn.slideable = function(options){
var self = this;
self.options = options;
self.left = 0;
self.down = 0;
self.pressed = false;
self.bindobj = options.bindobj || self;
self.bindobj.bind("mousedown",function(event){ onmousedown(self, event); })
self.bindobj.bind("mousemove",function(event){ onmousemove(self, event); })
self.bindobj.bind("mouseup" ,function(event){ onmouseup (self, event); })
self.bindobj[0].addEventListener('touchstart', function(event) { onmousedown(self, {screenX: event.changedTouches[0].pageX}); })
self.bindobj[0].addEventListener('touchmove' , function(event) { onmousemove(self, {screenX: event.changedTouches[0].pageX}); })
self.bindobj[0].addEventListener('touchend' , function(event) { onmouseup (self, {screenX: event.changedTouches[0].pageX}); })
return this;
}
function onmousedown(self, event){
self.down = event.screenX;
self.options.onmousedown && self.options.onmousedown(self);
self.left = self.options.getLeft && self.options.getLeft(self) || 0;
self.pressed = true;
}
function onmousemove(self, event){
self.pressed && self.options.setLeft && self.options.setLeft(self, self.left + event.screenX - self.down);
}
function onmouseup(self, event){
self.pressed = false;
self.left += event.screenX - self.down;
self.options.onslide && self.options.onslide(self, self.left);
}
//背景功能
$.fixedBackground = function(z_index, b_show){
var bk = $('#fixed-background-'+z_index+'');
if(!b_show)return bk && bk.remove();
if(!(bk && bk.length>0)){
bk = $('<div id="fixed-background-'+z_index+'" style="position:fixed;z-index:'+z_index+';left:0;top:0;right:0;bottom:0;background-color:rgba(0,0,0,0)">');
$("body").append(bk);
}
return bk;
}
})(jQuery);

关于上述代码给大家介绍的AngularJS仿苹果滑屏删除控件的相关代码,都是小编测试过的,可以放心安全使用。

Javascript 相关文章推荐
浅析document.createDocumentFragment()与js效率
Jul 08 Javascript
JS对象转换为Jquery对象示例
Jan 26 Javascript
跟我学习javascript的浮点数精度
Nov 16 Javascript
利用AngularJs实现京东首页轮播图效果
Sep 08 Javascript
微信小程序 获取相册照片实例详解
Nov 16 Javascript
JS中如何实现Laravel的route函数详解
Feb 12 Javascript
Ajax和Comet技术总结
Feb 19 Javascript
Vue.js实现的购物车功能详解
Jan 27 Javascript
微信小程序位置授权处理方法
Jun 13 Javascript
小程序调用微信支付的方法
Sep 26 Javascript
Ajax常用封装库——Axios的使用
May 08 Javascript
JS封装cavans多种滤镜组件
Feb 15 Javascript
jQuery easyui的validatebox校验规则扩展及easyui校验框validatebox用法
Jan 18 #Javascript
jquery.validate 自定义验证方法及validate相关参数
Jan 18 #Javascript
实例详解jQuery表单验证插件validate
Jan 18 #Javascript
基于JavaScript实现鼠标悬浮弹出跟随鼠标移动的带箭头的信息层
Jan 18 #Javascript
jQuery插件Validate实现自定义校验结果样式
Jan 18 #Javascript
jQuery插件实现带圆点的焦点图片轮播切换
Jan 18 #Javascript
轻松实现js图片预览功能
Jan 18 #Javascript
You might like
不用数据库的多用户文件自由上传投票系统(2)
2006/10/09 PHP
在同一窗体中使用PHP来处理多个提交任务
2008/05/08 PHP
PHP中usort在值相同时改变原始位置问题的解决方法
2011/11/27 PHP
tp5实现微信小程序多图片上传到服务器功能
2018/07/16 PHP
奉献给JavaScript初学者的编写开发的七个细节
2011/01/11 Javascript
JQuery模板插件 jquery.tmpl 动态ajax扩展
2011/11/10 Javascript
javascript函数声明和函数表达式区别分析
2014/12/02 Javascript
浅谈Jquery中Ajax异步请求中的async参数的作用
2016/06/06 Javascript
作为老司机使用 React 总结的 11 个经验教训
2017/04/08 Javascript
jQuery发请求传输中文参数乱码问题的解决方案
2018/05/22 jQuery
vue移动端城市三级联动组件使用详解
2019/07/26 Javascript
JS实现悬浮球只在一侧滑动并且是横屏状态下
2020/08/19 Javascript
使用IPython下的Net-SNMP来管理类UNIX系统的教程
2015/04/15 Python
Python彩色化Linux的命令行终端界面的代码实例分享
2016/07/02 Python
python Pygame的具体使用讲解
2017/11/03 Python
Python装饰器简单用法实例小结
2018/12/03 Python
Django保护敏感信息的方法示例
2019/05/09 Python
python读取并定位excel数据坐标系详解
2019/06/26 Python
Django Channel实时推送与聊天的示例代码
2020/04/30 Python
基于html和CSS3制作酷炫的导航栏
2015/09/23 HTML / CSS
用HTML5制作一个简单的桌球游戏的教程
2015/05/12 HTML / CSS
英国时尚运动品牌的合集:The Sports Edit
2017/12/20 全球购物
CheapTickets泰国:廉价航班,查看促销价格并预订机票
2019/12/28 全球购物
Jdbc数据访问技术面试题
2012/03/30 面试题
加拿大探亲邀请信
2014/01/28 职场文书
幸福家庭事迹材料
2014/02/03 职场文书
2014年开学第一课活动方案
2014/03/06 职场文书
倡议书范文
2014/04/16 职场文书
设备管理实施方案
2014/05/31 职场文书
学校门卫岗位职责范本
2014/06/30 职场文书
领导班子奢靡之风查摆问题及整改措施
2014/09/27 职场文书
投诉信回复范文
2015/07/03 职场文书
2016年六一文艺汇演开幕词
2016/03/04 职场文书
详解JavaScript中Arguments对象用途
2021/08/30 Javascript
Oracle安装TNS_ADMIN环境变量设置参考
2021/11/01 Oracle
Windows server 2012 配置Telnet以及用法详解
2022/04/28 Servers