網站沒有圖片放大預覽功能,當自己在文章中插入大尺寸圖片時,在網頁看圖片細節會看不清,這種情況要不右鍵保存圖片到本地,要不復製圖片鏈接在新窗口打開才能看到圖片中細節。其實只需要小小的js插件即可實現圖片預覽效果。
今天介紹的插件Viewer.js,效果可嘗試下圖。點擊圖片預覽,鼠標滾輪或鍵盤方向鍵上下可放大縮小,左右方向鍵可切換圖片,ESC或點擊X鍵退出預覽,並且支持幻燈片播放。
實現方法:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<link rel="stylesheet" href="css/viewer.min.css">
<script src="js/viewer.min.js"></script>
</head>
<body>
<img src="./img/tibet-1.jpg" alt="圖片1">
<img src="./img/tibet-2.jpg" alt="圖片2">
</body>
<script>
// 這裏選創建瀏覽對象所在範圍的元素,body全通用:
// 本頁採用的是document.getElementsByClassName("article-content")[0])
// 即根據文章內容class獲取文章內容元素 然對其進行創建預覽對象
var viewer = new Viewer(document.body);
</script>
</html>
其實也就是簡單調用其js與css,然後利用new Viewer()調用即可。JQ版本調用爲:
$('#id').viewer();
參數配置:
名稱 | 類型 | 默認值 | 說明 |
---|---|---|---|
inline | 布爾值 | false | 啓用 inline 模式 |
button | 布爾值 | true | 顯示右上角關閉按鈕(jQuery 版本無效) |
navbar | 布爾值/整型 | true | 顯示縮略圖導航 |
title | 布爾值/整型 | true | 顯示當前圖片的標題(現實 alt 屬性及圖片尺寸) |
toolbar | 布爾值/整型 | true | 顯示工具欄 |
tooltip | 布爾值 | true | 顯示縮放百分比 |
movable | 布爾值 | true | 圖片是否可移動 |
zoomable | 布爾值 | true | 圖片是否可縮放 |
rotatable | 布爾值 | true | 圖片是否可旋轉 |
scalable | 布爾值 | true | 圖片是否可翻轉 |
transition | 布爾值 | true | 使用 CSS3 過度 |
fullscreen | 布爾值 | true | 播放時是否全屏 |
keyboard | 布爾值 | true | 是否支持鍵盤 |
interval | 整型 | 5000 | 播放間隔,單位爲毫秒 |
zoomRatio | 浮點型 | 0.1 | 鼠標滾動時的縮放比例 |
minZoomRatio | 浮點型 | 0.01 | 最小縮放比例 |
maxZoomRatio | 數字 | 100 | 最大縮放比例 |
zIndex | 數字 | 2015 | 設置圖片查看器 modal 模式時的 z-index |
zIndexInline | 數字 | 0 | 設置圖片查看器 inline 模式時的 z-index |
url | 字符串/函數 | src | 設置大圖片的 url |
build | 函數 | null | 回調函數,具體查看演示 |
built | 函數 | null | 回調函數,具體查看演示 |
show | 函數 | null | 回調函數,具體查看演示 |
shown | 函數 | null | 回調函數,具體查看演示 |
hide | 函數 | null | 回調函數,具體查看演示 |
hidden | 函數 | null | 回調函數,具體查看演示 |
view | 函數 | null | 回調函數,具體查看演示 |
viewed | 函數 | null | 回調函數,具體查看演示 |
配置也很簡單,把參數配置寫在new Viewer第二個參數中即可:
new Viewer(document.body, {
url: 'data-original',
button: true,
navbar: true
});
項目示例:
//父頁面函數
/**
* 初始化按鈕,利用datagrid的row來自動生成每行對一個的圖片的一個預覽按鈕
* 因爲img元素在datagrid的formatter裏面,好像是不能觸發viewer.js的img的click事件,
* 這裏採用每一個預覽按鈕在父頁面生成一個imp的隱藏按鈕,預覽按鈕的click事件綁定了這個img的click事件
* @param rows
* @returns
*/
function initImageView(rows){
$('.image').remove();
for(var i = 0;i < rows.length;i++){
var row = rows[i];
if(row.attachmentName && (row.attachmentName.indexOf("jpg") > -1 || row.attachmentName.indexOf("png") > -1 ) ){
var appendStr = '<img src="'+row.downUri+'" title="圖片預覽" alt="圖片預覽" style="width: 20px; height: 15px;margin-top: 2px;display: none" id="image_'+row.id+'" class="image"/>';
$(appendStr).appendTo($('body'));
}
}
var viewer = new Viewer(document.body);
}
/**
* 點擊預覽圖片
* @param row
* @returns
*/
function showImageView(row){
var $rowImage = $('#image_'+row.id);
if($rowImage.length == 0){
var appendStr = '<img id="myImage" src="'+row.downUri+'" title="圖片預覽" alt="圖片預覽" style="width: 20px; height: 15px;margin-top: 2px;display: none" id="image_'+row.id+'" class="image"/>';
$(appendStr).appendTo($('body'));
$rowImage = $('#image_'+row.id);
}
$rowImage.trigger('click');//綁定了click事件
}
//子頁面
$({
$("#xgzlDataGrid").datagrid({
title: '',
fit:true,
method: "get",
loadMsg:'正在加載附件列表,請稍待...',
singleSelect:false,
url: './searchData',
idField: 'id',
rownumbers:true,
fitColumns:false,
extEditing: true,
frozenColumns: [[
]],
columns: [[
{ field: 'id', title: '', width: 50,editor:{type:'text'},halign:'center',align:'center',hidden:true},
{ field: 'attachmentName', title: '附件名稱', width: 220,tooltip:true,halign:'center',align:'lift'},
{ field: 'elementAttachment', title: '', width: 50,halign:'center',align:'center',hidden:true},
{ field: 'attachmentRequired', title: '操作', width: 180,halign:'center',align:'center',
formatter:function(index,row){
var optName = "上傳";
var str = "";
if(row.uri){
if(row.attachmentName.indexOf("jpg")>-1||row.attachmentName.indexOf("png")>-1){
str += "|<a class=\"l-btn l-btn-small l-btn-plain \" onclick=\"selectAttachment(this)\" title=\"附件預覽\" data-options=\"plain: true,title:'附件預覽'\"><span class=\"l-btn-left l-btn-icon-left\"><span class=\"l-btn-text\">預覽</span><span class=\"l-btn-icon icon-hamburg-graphy\"></span></span></a>";
}
}
return str;
}
}
]],topDrag:function(row){
},
onLoadSuccess:function(data)
{
window.parent.initImageView(data.rows);
},
});
})
/**
* 圖片預覽
* @param param
*/
function selectAttachment(param){
var index = $(param).parents("tr").attr('datagrid-row-index');
var row = $('#xgzlDataGrid').datagrid('getRowData',parseInt(index));
window.parent.showImageView(row);
return false;
}