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 相关文章推荐
将查询条件的input、select清空
Jan 14 Javascript
window.returnValue使用方法示例介绍
Jul 03 Javascript
Javascript Memoizer浅析
Oct 16 Javascript
深入探密Javascript数组方法
Jan 08 Javascript
Bootstrap学习笔记之css组件(3)
Jun 07 Javascript
Bootstrap和Angularjs配合自制弹框的实例代码
Aug 24 Javascript
Bootstrap进度条实现代码解析
Mar 07 Javascript
node.js中路由,中间件,ge请求和post请求的参数详解
Dec 26 Javascript
解决vue单页面应用中动态修改title问题
Jun 09 Javascript
Ant Design Pro 下实现文件下载的实现代码
Dec 03 Javascript
vue中的循环对象属性和属性值用法
Sep 04 Javascript
vue-video-player视频播放器使用配置详解
Oct 23 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
《PHP编程最快明白》第二讲 数字、浮点、布尔型、字符串和数组
2010/11/01 PHP
PHP使用数组实现队列
2012/02/05 PHP
php实现可运算的验证码
2015/11/10 PHP
PHP实现的简单排列组合算法应用示例
2017/06/20 PHP
深入理解 PHP7 中全新的 zval 容器和引用计数机制
2018/10/15 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
2019/11/26 PHP
JScript中的&quot;this&quot;关键字使用方式补充材料
2007/03/08 Javascript
指定js可访问其它域名的cookie的方法
2007/09/18 Javascript
JavaScript判断窗口是否最小化的代码(跨浏览器)
2010/08/01 Javascript
jquery聚焦文本框与扩展文本框聚焦方法
2012/10/12 Javascript
js获取或设置当前窗口url参数的小例子
2013/10/14 Javascript
jquery使用jquery.zclip插件复制对象的实例教程
2013/12/04 Javascript
node.js中的fs.realpath方法使用说明
2014/12/16 Javascript
JavaScript中操作Mysql数据库实例
2015/04/02 Javascript
javascript实现通过表格绘制颜色填充矩形的方法
2015/04/21 Javascript
javascript实现淡蓝色的鼠标拖动选择框实例
2015/05/09 Javascript
下一代Bootstrap的5个特点 超酷炫!
2016/06/17 Javascript
JavaScript常用正则函数用法示例
2017/01/23 Javascript
video.js 一个页面同时播放多个视频的实例代码
2018/11/27 Javascript
Vue.js如何使用Socket.IO的示例代码
2019/09/05 Javascript
[48:00]完美世界DOTA2联赛循环赛 Forest vs Inki BO2第二场 11.04
2020/11/04 DOTA
python字符串中的单双引
2017/02/16 Python
centos 安装Python3 及对应的pip教程详解
2019/06/28 Python
Flask-WTF表单的使用方法
2019/07/12 Python
torch 中各种图像格式转换的实现方法
2019/12/26 Python
手动安装python3.6的操作过程详解
2020/01/13 Python
Python版中国省市经纬度
2020/02/11 Python
python logging.basicConfig不生效的原因及解决
2020/02/20 Python
windows下的pycharm安装及其设置中文菜单
2020/04/23 Python
Django form表单与请求的生命周期步骤详解
2020/06/07 Python
全方位了解CSS3的Regions扩展
2015/08/07 HTML / CSS
html5中audio支持音频格式的解决方法
2018/08/24 HTML / CSS
英国马匹装备和马术用品购物网站:Equine Superstore
2019/03/03 全球购物
大唐电信科技股份有限公司java工程师面试经历
2016/12/09 面试题
2014年新农村建设工作总结
2014/12/01 职场文书
遇事可以测出您的见识与格局
2019/09/16 职场文书