昨天我在初音社(www.mikuclub.cn)看到了这个效果,有些地方的图片在鼠标经过时会放大,感觉很棒,整个网页似乎生动了不少,今天我也给自己的网站添加上了这个效果。
首先分析一下原理:在图片外层套了一个容器,这个容器和图片大小一样,设置超出隐藏。然后给图片添加上放大效果就可以了。
不过初音社应用这个效果的地方的宽高是固定的,但本站文章里的图片宽高是不一致的,所以需要用JavaScript来设定外层容器的宽高。
实现步骤如下:
首先添加css样式:
.img_scale_wrap{overflow: hidden;} /*外层元素*/ .post_t img{transition:1s;} /*设置过渡时间*/ .post_t img[data-scale]:hover{transform: scale(1.2);} /*放大效果*/
然后添加JavaScript代码:
var post_img = document.querySelectorAll(".post_t img"); // 获取所有图片 if (post_img.length > 0) { // 给图片添加缩放控制层 function set_post_img_wrap(img) { if (img.height>=500) { // 大于一定尺寸的才添加放大效果 img.setAttribute("data-scale", ""); // 添加放大属性 var post_img_wrap = document.createElement("div"); post_img_wrap.className = "img_scale_wrap"; img.parentNode.insertBefore(post_img_wrap, img); post_img_wrap.appendChild(img); post_img_wrap.style.width = img.width + "px"; post_img_wrap.style.height = img.height + "px"; } } // 给图片添加事件 for (var i = post_img.length - 1; i >= 0; i--) { if (post_img[i].complete) { set_post_img_wrap(post_img[i]); } else { post_img[i].onload = function() { set_post_img_wrap(this); } } } }
本文的代码也可以用在其他类型的网站上,不只是WordPress里才能用。但是移植时要按自己情况修改css选择器和js选择器。
给WordPress文章里的图片添加放大效果
-
Google Chrome 61Windows -
Google Chrome 60GNU/Linux x64 不会回复了,我刚才解决了.
-
Google Chrome 60GNU/Linux x64 今天发现一个问题,加入这个特效后,即使在wordpress后台设置了图片居中,图片真正显示时依然无法居中,楼主可有良策?
-
Google Chrome 59GNU/Linux x64 /*************************************************************************
* 函数名称:zoom_picture()
* 功能说明:设置图片放大特效
* 参数说明:use_computer用于判断是否为电脑访问
* 函数返回:无
* 完成时间:2017-07-23 11:37:23
*************************************************************************/
function zoom_picture() {
var use_computer = false; //默认不是电脑
// 先判断访问设备
var sUserAgent = navigator.userAgent.toLowerCase();
var bIsIpad = sUserAgent.match(/ipad/i) == "ipad";
var bIsIphoneOs = sUserAgent.match(/iphone os/i) == "iphone os";
var bIsMidp = sUserAgent.match(/midp/i) == "midp";
var bIsUc7 = sUserAgent.match(/rv:1.2.3.4/i) == "rv:1.2.3.4";
var bIsUc = sUserAgent.match(/ucweb/i) == "ucweb";
var bIsAndroid = sUserAgent.match(/android/i) == "android";
var bIsCE = sUserAgent.match(/windows ce/i) == "windows ce";
var bIsWM = sUserAgent.match(/windows mobile/i) == "windows mobile";
use_computer = !(bIsIpad || bIsIphoneOs || bIsMidp || bIsUc7 || bIsUc || bIsAndroid || bIsCE || bIsWM);
//是电脑才放大
if (use_computer) {
var post_img = document.querySelectorAll(".post_t img"); // 选择所有图片
if (post_img.length > 0) {
// 添加鼠标经过图片放大的css规则
var img_scale_css = document.createElement("style");
img_scale_css.innerHTML = ".post_t img:hover{transform: scale(1.2);}";
document.body.appendChild(img_scale_css);
// 给图片添加外层元素
function set_post_img_wrap(img) {
var post_img_wrap = document.createElement("div");
post_img_wrap.className = "img_scale_wrap";
img.parentNode.insertBefore(post_img_wrap, img);
post_img_wrap.appendChild(img);
post_img_wrap.style.width = img.width + "px";
post_img_wrap.style.height = img.height + "px";
}
// 给图片添加事件
for (var i = post_img.length - 1; i >= 0; i--) {
if (post_img[i].complete) { // 已加载完成的图片马上进行设置
set_post_img_wrap(post_img[i]);
} else { // 未加载完成的图片等到加载完再进行设置,否则获取不到宽高
post_img[i].onload = function() {
set_post_img_wrap(this);
}
}
}
};
}
}zoom_picture();
-
Google Chrome 59GNU/Linux x64 博主,想跟你探讨第二段代码的一个小bug,在我的wordpress中出现了,控制台显示你的没有出现,不知道你是怎样避免的。由于我们实验室网速不是很快,所以第二段代码会有一个小bug,控制台打印如下:Uncaught ReferenceError: post_img_wrap is not defined 。也就是说,对于网速比较慢的用户,可能在一张图片都没有加载完毕的时候,就执行了post_img_wrap.onload这一行,而此时由于没有一张图片被加载,所以set_post_img_wrap(img)函数一次都没有运行过,所以会报刚才的错误。我在你代码的基础上增加了一个布尔变量,就不会报错了:
$(document).ready(function() {
var post_img = document.querySelectorAll(".post_t img"); //选择图片
var has_load_picture = false;
console.log(post_img.length);
if (post_img.length > 0) {
//给图片添加外层元素
function set_post_img_wrap(img) {
has_load_picture = true;
post_img_wrap = document.createElement("div");
post_img_wrap.className = "img_scale_wrap";
img.parentNode.insertBefore(post_img_wrap, img);
post_img_wrap.appendChild(img);
post_img_wrap.style.width = img.width + "px";
post_img_wrap.style.height = img.height + "px";
}
//给图片添加事件
for (var i = post_img.length - 1; i >= 0; i--) {
if (post_img[i].complete) { //已加载完成的图片马上进行设置
set_post_img_wrap(post_img[i]);
} else if (has_load_picture) { //未加载完成的图片等到加载完再进行设置,否则获取不到宽高
post_img_wrap.onload = function() {
set_post_img_wrap(this);
}
}
}
}
}); -
Google Chrome 59GNU/Linux x64 怎样像你这样把每个页面设置成以".html"结尾?我的好像都是php,所以无法完成图片放大。
-
Google Chrome 59GNU/Linux x64 看你的东西有大半年了,获益良多,唯一美中不足是有时候会有些少儿不宜的东西,你懂得,老师在的话,我根本不敢乱看你的东西。
这个效果,感觉真棒!刚刚还发现鼠标经过头像还可以旋转O(∩_∩)O
~心里话:把你的老婆给我(T。T),果然还是saber最棒
意见:偶然发现以下网页的看图方式,或许能让看图更方便,网页不是我的专长,但还是希望能帮到
https://exvius.gamepedia.com/Zoldaad_Empire