1 | - (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error{ |
ios-微信分享的坑
1.微信小程序分享图片不能超过32k 否则分享不出去
2.微信小程序分享图片必须是nsdata格式
1 | NSString *filePath = [[NSBundle mainBundle] pathForResource:@"shareMiniprogram" ofType:@"png"]; |
所以一定要这么取
ps:有时候图片拖进项目里会找不到图片这个时候需要选中图片之后选择菜单中的
Source Control —> add selected files 就加进去了
rails - 单表继承(STI)
单表继承一般用于大部分字段相同只有少部分字段不同的情况
用type字段可以将他们区分开 会自动存储
modle:
1 | class WorkNameCard < NameCard |
优点:可以直接调用不同子类下的方法
如果子类不需要单独的方法可以不使用 STI
rails- float取整
ceil()方法表示向上取整,Math.ceil(4.3)的结果是5,Math.ceil(-9.8)的结果-9;
floor()方法表示向下取整,Math.floor(4.3)的结果是4,Math.floor(-9.8)的结果-10;
round()方法表示“四舍五入”,Math.round(4.3)的结果是4,Math.round(-9.8)的结果-10;
ps: 除法想取整需要是float去除 整数除完只会返回整数
bootstrap-取消dropdown 点击消失
解决办法
第一步
在dropdown-menu中的需要处理的元素添加 data-stopPropagation=”true”,data-stopPropagation属性是用来对点击时停止传播事件,这样我们的点击事件就不会传播给Bootstrap.js中去了。
第二步
调用Bootstrap的stopPropagation()函数,可以阻止元素点击时停止传播事件。
我在我的代码中写的比较粗暴,对整个treeview声明一个click事件,并且全部绑定上stopPropagation()方法。
$(“.treeview”).on(“click”,function (e) {
e.stopPropagation();
})
rails - hash 取值变成 a.b
auth = ActiveSupport::InheritableOptions.new(provider: ‘open’, info:ActiveSupport::InheritableOptions.new(nickname:’lslls’))
js-拖拽出现按钮
window.addEventListener(‘load’, function() {
var initX; //触摸位置
var moveX; //滑动时的位置
var X = 0; //移动距离
var objX = 0; //目标对象位置
window.addEventListener(‘touchstart’, function(event) {
var obj = event.target.closest(‘.list-li’);
if (obj != undefined) {
initX = event.targetTouches[0].pageX;
objX = (obj.style.WebkitTransform.replace(/translateX(/g, “”).replace(/px)/g, “”)) * 1;
$(‘.list-li’).css(‘transform’, ‘translateX(0px)’)
}
if (objX == 0) {
window.addEventListener(‘touchmove’, function(event) {
var obj = event.target.closest(‘.list-li’);
if (obj != undefined) {
moveX = event.targetTouches[0].pageX;
X = moveX - initX;
if (X >= 0) {
obj.style.WebkitTransform = “translateX(“ + 0 + “px)”;
} else if (X < 0) {
var l = Math.abs(X);
obj.style.WebkitTransform = “translateX(“ + -l + “px)”;
if (l > 80) {
l = 80;
obj.style.WebkitTransform = “translateX(“ + -l + “px)”;
}
}
}
});
} else if (objX < 0) {
window.addEventListener(‘touchmove’, function(event) {
var obj = event.target.closest(‘.list-li’);
if (obj != undefined) {
moveX = event.targetTouches[0].pageX;
X = moveX - initX;
if (X >= 0) {
var r = -80 + Math.abs(X);
obj.style.WebkitTransform = “translateX(“ + r + “px)”;
if (r > 0) {
r = 0;
obj.style.WebkitTransform = “translateX(“ + r + “px)”;
}
} else { //向左滑动
obj.style.WebkitTransform = “translateX(“ + -80 + “px)”;
}
}
});
}
})
window.addEventListener(‘touchend’, function(event) {
var obj = event.target.closest(‘.list-li’);
if (obj != undefined) {
objX = (obj.style.WebkitTransform.replace(/translateX(/g, “”).replace(/px)/g, “”)) * 1;
if (objX > -40) {
obj.style.WebkitTransform = “translateX(“ + 0 + “px)”;
objX = 0;
} else {
obj.style.WebkitTransform = “translateX(“ + -80 + “px)”;
objX = -80;
}
}
})
})
css:
.list-ul {
overflow: hidden*text 一定要有
}
.list-li {
line-height: 60px;
border-bottom: 1px solid #fcfcfc;
position: relative;
padding: 0 12px;
color: #666;
background: #f2f2f2;
-webkit-transform: translateX(0px);
}
.btn {
position: absolute;
top: 0;
right: -80px;
text-align: center;
background: #ffcb20;
color: #fff;
width: 80px
}
js-toggle animate
1、show()显示效果
语法:show(speed,callback) Number/String,Function speend为动画执行时间,单位为毫秒。也可以为slow”,”normal”,”fast” callback可选,为当动画完成时执行的函数。
show(speed,[easing],callback) Number/String easing默认是swing,可选linear;
$(“#div1”).show(3000,function(){ alert(“动画显示完成!”); });
2、hide()隐藏效果
语法:hide(speed,callback) Number/String,Function
hide(speed,easing,callback) Number/String
$(“#div1”).hide(3000,function(){ alert(“动画隐藏完成”) });
3、toggle()隐藏显示自动切换,当目前为显示则隐藏,当目前为隐藏则显示
语法:toggle(speed,callback) Number/String,Function
toggle(speed,callback) Number/String,String,Function
$(“#div1”).toggle(3000,function(){ alert(“动画效果切换完成”) });
4、slideDown()向下显示,slow()是水平与垂直方向同时展开,而slideDown是仅仅在垂直方向向下展开
语法:slideDown(speed,callback) Number/String,Function
slideDown(speed,[easing],callback) Number/String,Function
$(“#div1”).slideDown(3000,function(){ alert(“向下展开显示成功!”); });
5、slideUp()向上隐藏, hide()是水平与垂直两个方向的,而slideUp()仅仅是垂直方向向上收起隐藏
语法:slideUp(speed,callback) Number/String,Function
slideUp(speed,[easing],callback) Number/String,String,Function
$(“#div1”).slideUp(3000,function(){ alert(“向上收起隐藏成功!”); })
6、slideToggle垂直方向上切换,toggle是水平与垂直两个方向上的,而slideToggle是仅仅垂直方向的。
语法:slideToggle(speed,callback) Number/String,Function
slideToggle(speed,[easing],callback) Number/String,String,Function
$(“#div1”).slideToggle(3000,function(){ alert(“水平方向上切换成功”); });
7、fadeIn() 以改变透明度来显示
语法:fadeIn(speed,callback) Number/String,Function
fadeIn(speed,[easing],callback) Number/String,Function
$(“#div1”).FadeIn(3000,function(){ alert(“淡入显示成功!”); });
8、fadeOut() 以改变透明度来隐藏
语法:fadeOut(speed,callback) Number/String,Function
fadeOut(speed,[easing],callcack) Number/String,String,Function
$(“#div1”).fadeOut(3000,function(){ alert(“淡出隐藏成功!”); });
9、fadeToggle() 以改变透明度来切换显示隐藏状态
语法: fadeToggle(speed,callback) Number/String,Function
fadeToggle(speed,[easing],callback) Number/String,Function
$(“#div1”).fadeToggle(3000,function(){ alert(“淡入淡出切换成功!”); });
10、fadeTo() 由指定的时间将透明度改变到指定的透明度
语法:fadeTo(speed,callback) Number/String,Function
fadeTo([speed],opacity,[easing],[fn]) Number/String,Float,String,Function
$(“#div1”).fadeTo(3000,0.22,function(){ alert(“透明度改变成功!”); });
11、animate() 自定义动画,一般来说数字变动都可以用于动画。
语法:animate(params,speed,easing,callback); 样式参数,时间,可选择,函数
$(“#div1”).animate({ width:300px,height,300px },3000);
其中params要用中括号括起来,可以使用的css样式参数。注意要采用骆驼法则,如font-size要写成fontSize。颜色渐变不支持。
backgroundPosition
borderWidth
borderBottomWidth
borderLeftWidth
borderRightWidth
borderTopWidth
borderSpacing
margin
marginBottom
marginLeft
marginRight
marginTop
outlineWidth
padding
paddingBottom
paddingLeft
paddingRight
paddingTop
height
width
maxHeight
maxWidth
minHeight
maxWidth
font
fontSize
bottom
left
right
top
letterSpacing
wordSpacing
lineHeight
textIndent
12、stop() 停止正在执行动画
stop([clearQueue],[gotoEnd]); 两个参数均为布尔值,第一个表示,是否停止动画执行、第二个表示,如果停止,是否立即变为执行完成的状态,如果设置为否,则停留在执行一半的状态。
$(“#div1”).hide(5000) //此动画正在执行
$(“#div1”).stop(); //上一行代码指定的动画停止在一半状态
$(“#div1”).stop(true,true); //停止当前动画,同时动画切换到完成执行状态。
13、delay() 延迟执行动画 当一个动画stop()了之后还能够用delay()来延迟执行。从停止位置继续执行。当然用原来的方法继续执行也不可,不过没有延时效果。
delay(duration,[queueName]) 设置一个延迟值来执行动画 Integer,String
$(“#div1”).delay(3000).hide(3000); //表示在3000毫秒后执行hide(3000);
14、jQuery.fx.off //该属性只是是否关闭当前页面上的动画,关闭动画之后,没有动画效果,所有设置了执行时间的动画会瞬间完成。注意此属性出现的位置。出现的位置不同影响的范围也不同。
$(function(){
jQuery.fx.off = true; //属性在事件外面,对页面加载后执行的所有动画有效
$(“#div1”).click(function(){ //属性如果写在这里,仅仅对当前点击事件无效,不影响其他事件的动画
$(“#div1”).hide(3000); //注意由于jQuery.fx.off设置为了true,因此3000毫秒失效,相当于hide();
});
})
15、jQuery.fx.interval //该属性设置动画的帧速,单位是毫秒,如果设置的时间越小,就越平滑。,属性出现的位置同样有影响范围
$(function(){
jQuery.fx.interval = 1000;
$(“#div1”).click(function(){
$(“#div1”).hide(3000); //jQuery.fx.interval设置为1000,也就是1秒钟,改变一次效果。
});
})
git-stash
- git stash save
- git stash show
- git stash drop
- git stash pop
- git stash apply
- git stash list –date=short