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 相关文章推荐
ASP中Sub和Function的区别说明
Aug 30 Javascript
JavaScript插件化开发教程(六)
Feb 01 Javascript
jQuery对指定元素中指定字符串进行替换的方法
Mar 17 Javascript
JavaScript验证Email(3种方法)
Sep 21 Javascript
简单总结JavaScript中的String字符串类型
May 26 Javascript
JS限制条件补全问题实例分析
Dec 16 Javascript
fetch 使用及如何接收JS传值
Nov 11 Javascript
jQuery+CSS实现的table表格行列转置功能示例
Jan 08 jQuery
vue iview实现动态路由和权限验证功能
Apr 17 Javascript
详解开发react应用最好用的脚手架 create-react-app
Apr 24 Javascript
深入了解javascript 数组的sort方法
Jun 01 Javascript
Vue瀑布流插件的使用示例
Sep 19 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学习之运算符相关概念
2011/06/09 PHP
基于PHP实现假装商品限时抢购繁忙的效果
2015/10/16 PHP
php中字符串和整数比较的操作方法
2019/06/06 PHP
Javascript代码混淆综合解决方案-Javascript在线混淆器
2006/12/18 Javascript
javascript 解析后的xml对象的读取方法细解
2009/07/25 Javascript
JavaScript 10件让人费解的事情
2010/02/15 Javascript
javascript-表格排序(降序/反序)实现介绍(附图)
2013/05/30 Javascript
div浮层,滚动条移动,位置保持不变的4种方法汇总
2013/12/11 Javascript
动态添加option及createElement使用示例
2014/01/26 Javascript
jQuery弹出框代码封装DialogHelper
2015/01/30 Javascript
JavaScript实现基于Cookie的存储类实例
2015/04/10 Javascript
Vue 固定头 固定列 点击表头可排序的表格组件
2016/11/25 Javascript
JavaScript实现body内任意节点的自定义属性功能示例
2017/09/18 Javascript
仿淘宝JSsearch搜索下拉深度用法
2018/01/15 Javascript
解决低版本的浏览器不支持es6的import问题
2018/03/09 Javascript
小程序二次贝塞尔曲线实现购物车商品曲线飞入效果
2019/01/07 Javascript
Vue的H5页面唤起支付宝支付功能
2019/04/18 Javascript
Vue学习之组件用法实例详解
2020/01/06 Javascript
javascript事件循环event loop的简单模型解释与应用分析
2020/03/14 Javascript
JS数组的常用10种方法详解
2020/05/08 Javascript
解决vue使用vant轮播组件swipe + flex时文字抖动问题
2021/01/07 Vue.js
[01:19:11]Ti4 循环赛第二日 NaVi.us vs iG
2014/07/11 DOTA
pycharm 使用心得(三)Hello world!
2014/06/05 Python
Python最基本的输入输出详解
2015/04/25 Python
完美解决在oj中Python的循环输入问题
2018/06/25 Python
对pandas数据判断是否为NaN值的方法详解
2018/11/06 Python
Python玩转PDF的各种骚操作
2019/05/06 Python
Django框架实现的普通登录案例【使用POST方法】
2019/05/15 Python
python中数组和矩阵乘法及使用总结(推荐)
2019/05/18 Python
django admin.py 外键,反向查询的实例
2019/07/26 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
2019/08/05 Python
PyCharm下载和安装详细步骤
2019/12/17 Python
css3实现超炫风车特效
2014/11/12 HTML / CSS
预备党员思想汇报
2014/01/08 职场文书
企业优秀员工事迹材料
2014/05/28 职场文书
详解CSS3浏览器兼容
2022/12/24 HTML / CSS