JavaScript是可以获取Response Header(响应头)的信息的:
如果是使用XMLHttpRequest, 这个对象本身有一个getResponseHeader(DOMString header)的方法来获取。
如果是使用jQuery.ajax, 在success属性对应的回调函数中,第三个参数会被jQuery设置一个jqXHR的对象,这个对象是对XMLHttpRequest对象的一个封装,也是有getResponseHeader方法的。
不过我这里要说的是GM_xmlhttpRequest,也就是俗称的“油猴脚本”里的功能。在firefox里的油猴扩展是Greasemonkey,在chrome中则是Tampermonkey。它们都内置了GM_xmlhttpRequest方法,用于处理ajax事件。
GM_xmlhttpRequest有个很好用的地方是它不会受跨域限制(当油猴脚本跨域时,会先提示你是否允许跨域,允许即可)。
要使用GM_xmlhttpRequest,需要先在脚本头部引入GM_xmlhttpRequest:
// @grant GM_xmlhttpRequest
然后用GM_xmlhttpRequest的head方法获取响应头:
GM_xmlhttpRequest({ url: "url", method: "HEAD", onload: function(response) { console.log(response.responseHeaders); } });
我获取了p站一个图片的响应头,输出类似下面:
Date: Tue, 07 Mar 2017 05:31:54 GMT X-Content-Type-Options: nosniff Last-Modified: Tue, 08 Mar 2016 09:00:36 GMT Server: nginx Content-Type: image/jpeg Cache-Control: max-age=31536000 Accept-Ranges: bytes Content-Length: 528794 Expires: Fri, 02 Mar 2018 10:41:44 GMT
不过我现在还有个疑惑,就是油猴怎么从响应头中提取某个特性属性的值。它好像没有getResponseHeader方法。
GM_xmlhttpRequest获取响应头
在织梦的列表页我们会使用dede:list标签调出文章。此标签可以自动分页,但是要在其中调用文章正文的一部分来做简介的话,却不像dede:arclist标签那么方便。
要在列表页调用文章正文,需要我们更改频道模型。
到后台 核心 -> 频道模型 -> 内容模型管理 -> 普通文章 -> 更改,在“列表附加字段”一栏填入“body保存,其他不用改。
之后即可在dede:list里调用:
{dede:list pagesize='10'} [field:body function='cn_substr(html2text(@me),600)'/] {/dede:list}
在织梦列表页调用文章正文
非酋抽不到ssr?那就来现场制卡吧!你可以拥有你任何想要的ssr!
这个卡牌生成器可以生成所有职阶的ssr卡面(也只能生成ssr)。
ATK & HP满值都是29999,通过拖动rank按钮可以调小。不过网页上不会实时显示调整后的数值,是个缺憾。
ps:
1.最好先把图片裁剪到500*730px,以达到完美的效果。
2.有时候需要一点时间来加载卡牌的边框,需要等一小会儿。
Fate/Grand Order卡牌生成器
我整理的这个2B小姐姐的图包是在p站搜索tag"ヨルハ二号B型 r-18"之后,筛选出的收藏数在1500以上的作品。
度盘链接 提取码:kv57 解压密码:13579
Read More →
pixiv上2B小姐姐的R18图包
今天排版时有一个四方块列表,效果是当鼠标放上去时方块会四散开来(其实效果图也是我做的)。于是我用css3动画做了效果出来。
布局时大量使用定位,以方便元素做位置变化。使用伪元素做了线条,感觉挺好用~
Read More →
css3制作的列表扩散效果一例
我们经常对html元素使用hover选择器来做一些效果,比如当鼠标放在一个a标签上时改变文字颜色:
a{color: #F4A801} //超链接的文字是橘黄色 a:hover{color: #FF0000} //当鼠标经过时变成红色
如果加上css3的一些过渡属性就会出现变化的过程,成为简单的css3动画。
但是之前我没想到 ::before 和 ::after 这俩伪元素也可以用类似hover的选择器触发它们的动画。今天见识到了,感觉很棒。
如下效果,当鼠标放到这个按钮上时会在底部展开一条线:
这个是怎么做的呢?
按钮是A标签,需要给它设置相对定位和超出隐藏:
a{position: relative;overflow: hidden;}
然后用::before伪元素在底部做一条线,只不过一开始没让这条线显示出来。::before伪元素需要设置绝对定位,这样可以让它位于按钮内部。
最后,当鼠标经过按钮时(hover)改变::before伪元素的css属性,如同文章开头的代码中改变a标签的属性一样,只是写法不同:
a:hover::before{ /*css属性*/ }
最终实现的代码如下:
<a href="" id="more">查看更多</a> <style> #more{display: inline-block;width: 150px;height: 48px;line-height: 48px;text-align: center;font-size: 20px;color: #fff;text-decoration: none !important;text-shadow:none !important;background: #8EE964; /*最后的por和ovh是必须的*/ position: relative;overflow: hidden; } #more:before{ /*设置初始状态*/ content: ""; position: absolute; left: 50%; right: 50%; bottom: 0; background: #ff9d2e; height:5px; /*transition-property 设置过渡时要改变的属性 若不设置则为all*/ transition-property: left, right; transition-duration: 0.3s; transition-timing-function: ease-out; } #more:hover:before, #more:focus:before, #more:active:before { /*当鼠标经过、或按钮被焦点、被激活时对before的属性进行改变*/ left: 0; right: 0; } </style>
ps:
我这次没使用::after伪元素,大家可以按需使用。
伪元素前面写两个冒号是符合标准的写法,写一个冒号是为了兼容比较旧的浏览器,实际使用中写一个或两个均可。
如有需要,也在hover外部定义动画,然后在hover内引用。如:
#more:hover:before, #more:focus:before, #more:active:before { animation:showUnderline .3s forwards; } @keyframes showUnderline { to{ left: 0; right: 0; } }
注意,@keyframes定义的动画和直接在样式里写的动画有区别:
以鼠标hover时执行动画为例,@keyframes定义的动画,当鼠标离开后没有逐渐恢复至原来状态的过程,而在元素样式内定义的则有。
以本文的按钮为例,@keyframes定义的动画,当鼠标离开按钮后那个底边不会逐渐向中间收缩,而是瞬间就消失了。
使用 ::before 和 ::after 伪元素来制作CSS3动画
我最近做了一个带下拉菜单的导航,学到了event.currentTarget的使用。
demo如下:
代码:
<nav> <ul> <li class="lelve1"> <a href="">下拉菜单</a> <div class="subNav"> <a href="">企业简介</a> <a href="">发展历程</a> <a href="">主营业务</a> </div> </li> </ul> </nav> <script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script> <script> var isHover=false; $(".lelve1").mouseenter( function (event) { isHover=true; $(this).find(".subNav").fadeIn(); //$(event.currentTarget).find(".subNav").fadeIn(); } ); $(".lelve1").mouseleave( function (event) { isHover=false; var a=$(this); setTimeout(function () { if (!isHover) { a.find('.subNav').fadeOut(); //$(event.currentTarget).find(".subNav").fadeOut(); } },50) } ); </script>
因为鼠标进入、鼠标离开事件都是绑定在一级导航上的,所以操作子导航的显示、隐藏时,都是通过在一级导航的元素里寻找子元素达到的:
$(this).find(".subNav").fadeIn(); a.find('.subNav').fadeOut();
这时都是使用this来指代一级导航,但除了使用this,还有另一个办法,就是使用event.currentTarget。
那event.currentTarget是什么呢?event.currentTarget指向事件所绑定的元素。
我们的鼠标进入、鼠标离开都是绑定在一级导航上,所以event.currentTarget所指向的元素始终是一级导航,使用起来很方便,而且可靠。
this在多层事件函数嵌套时经常会发生改变。但如果使用event.currentTarget的话,在这个作用域链里,event.currentTarget都不会变。所以我觉得event.currentTarget更方便可靠。
ps:event的属性里有一个大概比event.currentTarget更常用的,是event.target,指向触发该事件的元素。
event.currentTarget指向事件所绑定的元素,而event.target始终指向事件发生时的元素。
以前我有个错误的认知,以为哪个元素绑定的事件,那么触发事件的元素也是这个元素。其实不是的,像本例,当鼠标从子导航上离开时,触发一级导航mouseleave事件的元素(event.target)是a标签,而不是一级导航li标签。
JavaScript中event.currentTarget的使用
这是我从网上搜集的Fate/Grand Order立绘魔改脱衣图的合集。主要tag是“剥ぎコラ”。合计59张图。
百度网盘下载 提取码:wexu 解压密码:saber.love
Read More →
fgo魔改立绘脱衣福利图
昨天fgo除了花嫁尼禄的池子,于是我也到p站上,把花嫁尼禄(セイバー・ブライド)收藏数1500以上的图存了下来,分享给大家。
度盘下载 提取码:96a2 解压密码:13579
下载器是我写的《仙尊pixiv图片批量下载器》。
Read More →