预览效果图

完整版的实例放在在git上面: https://github.com/keyus/keyus_gallary,
唯一的难点就是缩略图scrollleft位置的计算..,搞懂了就非常好办了。
兼容:ie9以上版本,google,firefox,360,qq等

html dom结构

<style>*{margin: 0;padding: 0;font-size: 14px;}.top{height: 50px;background: #000}.gallary{padding: 20px 20px 85px 20px;overflow: hidden;background: #efefef;position: relative;box-sizing: border-box}.gallary-view{background: #fff;text-align: center;padding: 10px;box-sizing: border-box}.gallary-view__show{overflow: hidden;height: 100%;position: relative}.gallary-view__show--left{position: absolute;width: 50%;left: 0;height: 100%;cursor: url(images/up_l.cur),auto !important;}.gallary-view__show--right{position: absolute;width: 50%;right: 0;height: 100%;cursor: url(images/up_r.cur),auto !important;}.gallary-thumb__img{height: 60px;position: absolute;bottom: 15px;left: 85px;right: 85px;box-sizing: border-box;overflow: hidden;white-space: nowrap;}.gallary-thumb__img a{display: inline-block;width: 60px;height: 60px;box-sizing: border-box;border: 2px solid transparent;}.gallary-thumb__img a.active,.gallary-thumb__img a:hover{border: 2px solid #ff4e00;}.gallary-thumb__img a img{width: 100%;height: 100%;}.gallary-arrow{position: absolute;bottom: 0;height: 85px;width: 85px;}.gallary-arrow a{width: 50px;height: 70px;display: block;background: url("images/share_ioc.png") no-repeat;margin-top: 8px}.gallary-thumb__left{left: 0;}.gallary-thumb__right{right: 0;}.gallary-thumb__left a{background-position: 13px -155px;margin-left: 20px}.gallary-thumb__right a{background-position: 13px -208px;margin-left: 10px}
</style><div class="gallary" data-compnent="gallary"><div class="gallary-view"><div class="gallary-view__show"><div class="gallary-view__show--left"></div><div class="gallary-view__show--right"></div><img src="" alt=""></div></div><div class="gallary-arrow gallary-thumb__left"><a href="javascript:;"></a></div><div class="gallary-arrow gallary-thumb__right"><a href="javascript:;"></a></div><div class="gallary-thumb__img"><a href="javascript:;" data-id="1" data-img="img/1.jpg"><img src="img/1.jpg" alt=""></a><a href="javascript:;" data-id="2" data-img="img/2.jpg"><img src="img/2.jpg" alt=""></a><a href="javascript:;" data-id="3" data-img="img/3.jpg"><img src="img/3.jpg" alt=""></a><a href="javascript:;" data-id="4" data-img="img/4.jpg"><img src="img/4.jpg" alt=""></a><a href="javascript:;" data-id="5" data-img="img/5.jpg"><img src="img/5.jpg" alt=""></a><a href="javascript:;" data-id="6" data-img="img/6.jpg"><img src="img/6.jpg" alt=""></a><a href="javascript:;" data-id="7" data-img="img/7.jpg"><img src="img/7.jpg" alt=""></a><a href="javascript:;" data-id="8" data-img="img/8.jpg"><img src="img/8.jpg" alt=""></a><a href="javascript:;" data-id="9" data-img="img/9.jpg"><img src="img/9.jpg" alt=""></a><a href="javascript:;" data-id="10" data-img="img/10.jpg"><img src="img/10.jpg" alt=""></a><a href="javascript:;" data-id="11" data-img="img/11.jpg"><img src="img/11.jpg" alt=""></a><a href="javascript:;" data-id="12" data-img="img/12.jpg"><img src="img/12.jpg" alt=""></a><a href="javascript:;" data-id="13" data-img="img/13.jpg"><img src="img/13.jpg" alt=""></a><a href="javascript:;" data-id="14" data-img="img/14.jpg"><img src="img/14.jpg" alt=""></a><a href="javascript:;" data-id="15" data-img="img/15.jpg"><img src="img/15.jpg" alt=""></a><a href="javascript:;" data-id="16" data-img="img/16.jpg"><img src="img/16.jpg" alt=""></a><a href="javascript:;" data-id="17" data-img="img/17.jpg"><img src="img/17.jpg" alt=""></a><a href="javascript:;" data-id="18" data-img="img/18.jpg"><img src="img/18.jpg" alt=""></a><a href="javascript:;" data-id="19" data-img="img/19.jpg"><img src="img/19.jpg" alt=""></a><a href="javascript:;" data-id="20" data-img="img/20.jpg"><img src="img/20.jpg" alt=""></a><a href="javascript:;" data-id="21" data-img="img/21.jpg"><img src="img/21.jpg" alt=""></a><a href="javascript:;" data-id="22" data-img="img/22.jpg"><img src="img/22.jpg" alt=""></a><a href="javascript:;" data-id="23" data-img="img/23.jpg"><img src="img/23.jpg" alt=""></a><a href="javascript:;" data-id="24" data-img="img/24.jpg"><img src="img/24.jpg" alt=""></a><a href="javascript:;" data-id="25" data-img="img/25.jpg"><img src="img/25.jpg" alt=""></a><a href="javascript:;" data-id="26" data-img="img/26.jpg"><img src="img/26.jpg" alt=""></a><a href="javascript:;" data-id="27" data-img="img/27.jpg"><img src="img/27.jpg" alt=""></a><a href="javascript:;" data-id="28" data-img="img/28.jpg"><img src="img/28.jpg" alt=""></a><a href="javascript:;" data-id="29" data-img="img/29.jpg"><img src="img/29.jpg" alt=""></a><a href="javascript:;" data-id="30" data-img="img/30.jpg"><img src="img/30.jpg" alt=""></a></div>
</div>

js gallary插件代码

写的时候没有考虑依赖jquery库

具体使用方式

new Gallary({el          : "[data-compnent='gallary']",selected    : "5",
});
  • el 为dom元,默认使用[data-compnent=’gallary’]
  • selected 初始显示的缩略图的data-id,默认为1
/*** Created by David on 4/6/2017.*/
/*** gallary* 插件*/
;(function () {function hasClass(elem, cls) {cls = cls || '';if (cls.replace(/\s/g, '').length == 0) return false; //当cls没有参数时,返回falsereturn new RegExp(' ' + cls + ' ').test(' ' + elem.className + ' ');}function addClass(ele, cls) {if (!hasClass(ele, cls)) {ele.className = ele.className == '' ? cls : ele.className + ' ' + cls;}}function removeClass(ele, cls) {if (hasClass(ele, cls)) {var newClass = ' ' + ele.className.replace(/[\t\r\n]/g, '') + ' ';while (newClass.indexOf(' ' + cls + ' ') >= 0) {newClass = newClass.replace(' ' + cls + ' ', ' ');}ele.className = newClass.replace(/^\s+|\s+$/g, '');}}function getprev(element) {var e = element.previousSibling;if(e == null){//测试同胞节点是否存在,否则返回空return null;}if(e.nodeType==3){//如果同胞元素为文本节点var two = getprev(e);if(!two) return null;if(two.nodeType == 1) return two;}else{if(e.nodeType == 1){//确认节点为元素节点才返回return e;}else{return false;}}}function getnext(element) {var e = element.nextSibling;console.log(e)if(!e){//测试同胞节点是否存在,否则返回空return null;}if(e.nodeType==3){//如果同胞元素为文本节点var two = getnext(e);if(!two) return null;if(two.nodeType == 1) return two;}else{if(e.nodeType == 1){//确认节点为元素节点才返回return e;}else{return false;}}}function Gallary(option) {this.el             = document.querySelectorAll(option.el) || document.querySelectorAll("[data-compnent='gallary']");this.selected       = option.selected || 1;this.init();}//上一张图片Gallary.prototype.upItem        = function (item,parent,view) {var self = this;item.addEventListener('click',function () {var cur = parent.querySelector('a.active');var prev = getprev(cur);prev && self.setItem(prev,view);})}//下一张图片Gallary.prototype.nextItem      = function (item,parent,view) {var self = this;item.addEventListener('click',function () {var cur = parent.querySelector('a.active');var next = getnext(cur);next && self.setItem(next,view);})}//设置显示图片Gallary.prototype.setItem       = function (item,view) {this.setScrollleft(item,item.parentNode)var imgurl = item.getAttribute('data-img');view.setAttribute('src',imgurl);removeClass(item.parentNode.querySelector("a.active"),'active');addClass(item,'active');}//与初始化显示ID图片Gallary.prototype.initView      = function (it,view) {if(it.getAttribute('data-id') == this.selected){addClass(it,'active');view.setAttribute('src',it.getAttribute('data-img'))}}//点击缩略图图片切换Gallary.prototype.toggleImg     = function (it,view) {var self = this;it.addEventListener('click',function () {self.setItem(this,view);})}//设置缩略图的位置Gallary.prototype.setScrollleft = function (item,item_box) {var box_width           = item_box.clientWidth;var item_clientWidth    = item.clientWidth;var item_offsetLeft     = item.offsetLeft;item_box.scrollLeft = item_offsetLeft - (box_width - item_clientWidth) / 2;}//初始化控件Gallary.prototype.initControl   = function () {var self = this;Array.prototype.forEach.call(self.el,function (item) {var thumb       = item.querySelector('.gallary-thumb__img'),           //缩略图盒子thumb_a     = item.querySelectorAll('.gallary-thumb__img a'),      //缩略图项view        = item.querySelector('.gallary-view__show img'),       //大图盒子bigleft     = item.querySelector('.gallary-view__show--left'),     //大图左侧bigright    = item.querySelector('.gallary-view__show--right'),    //大图右侧thumbleft   = item.querySelector('.gallary-thumb__left'),          //缩略图左thumbright  = item.querySelector('.gallary-thumb__right');         //缩略图右Array.prototype.forEach.call(thumb_a,function (it) {self.initView(it,view);                                            //初始化显示一张大图self.toggleImg(it,view);                                           //监听点击缩略图切换})self.upItem(bigleft,thumb,view);                                       //监听大图区域左切换self.upItem(thumbleft,thumb,view);                                     //监听略略图左切换self.nextItem(bigright,thumb,view);                                    //监听大图区域右边切换self.nextItem(thumbright,thumb,view);                                  //监听略略图右边切换})}Gallary.prototype.init = function () {this.initControl();}window.Gallary = Gallary;
})();

js 图片浏览插件原生相关推荐

  1. 简单粗暴的移动端图片浏览插件demo

    使用方法: 首先引入 jQuery <script src="./fly-zomm-img.min.js"></script> 再引入 图片浏览插件 < ...

  2. PhotoSwipe 图片浏览插件使用方法 - 简单

    [转载] [JS插件] PhotoSwipe 图片浏览插件使用方法 一.介绍 PhotoSwipe 是专为移动触摸设备设计的相册/画廊.兼容所有iPhone.iPad.黑莓6+,以及桌面浏览器.底层实 ...

  3. viewers.js 图片查看插件使用说明-vue中引用

    viewers.js 图片查看插件 官方地址 官方地址 安装 npm install viewerjs 在main.js 中引入 // 图片查看插件 import Viewer from 'v-vie ...

  4. 微信内置浏览器无法使用input图片上传和lrz.bundle.js图片压缩插件

    标题 微信内置浏览器无法使用input图片上传和lrz.bundle.js图片压缩插件 图片上传功能作为一个比较常见的功能,有时候需要在微信内置浏览器里打开,但是有些型号的手机会出现打不开的现象,点击 ...

  5. 30个图片浏览插件收集

    1.MultiBox 一个lightbox支持的内容格式包括:图片,Flash,视频,mp3,html. 主页:http://www.phatfusion.net/multibox/ 下载:http: ...

  6. Jquery 图片浏览插件

    原文来源:http://www.techolics.com 在网页的首页或图片专题页面很多地方都会用到图片滑动插件来循环切换多张图片,并且用户可以点击左右按钮来切换图片.相信大家都知道jQuery是最 ...

  7. 图片浏览插件(支持图片轮播、上下张查看、放大缩小、旋转)

    应用场景: 在页面上显示图片,但图片太小,不方便观看. 在页面展示的原图: 使用插件查看的效果图:  主要功能: 支持选项 支持方法 支持事件 支持触摸 支持移动 支持缩放 支持旋转 支持键盘 跨浏览 ...

  8. PhotoSwipe 图片浏览插件使用方法

    一.简介 PhotoSwipe 是专为移动触摸设备设计的相册/画廊.兼容所有iPhone.iPad.黑莓6+,以及桌面浏览器.底层实现基于HTML/CSS/JavaScript,是一款免费开源的相册产 ...

  9. js图片压缩插件compressorjs

    //d.file是上传的原始文件数据let quality=1if(d.file.size<1000*1000){ //小于1Mquality=0.8}else if(d.file.size&l ...

  10. 前端开发不容错过的jQuery图片滑块插件(转)

    作为前端开发者,我们会碰到很到各种各样的jQuery插件.今天要分享的几款jQuery图片滑块插件,也就是jQuery焦点图插件,基本上会在每个网站都有应用,可以下载看看,也许你可以用到. 1.jQu ...

最新文章

  1. 今天带你们走进缓存的雪崩、击穿、穿透基本概念
  2. java B2B2C Springcloud多租户电子商城系统-集成项目简介
  3. 网游服务器端设计思考:心跳设计
  4. xcode动态改变窗口大小_详细的理论要点+3个经典案例,帮助你深入理解动态面板...
  5. 报名 | 美团技术沙龙第64期:美团不同业务场景下的系统架构实践
  6. redhat怎样修改语言_硕士博士个人陈述(PS)辅导及修改服务带你极速前进!
  7. ssis连接oracle报错,SSIS连接Oracle问题汇总
  8. 2020-07-28 activeMq 两种模式的测试
  9. 【中英】【吴恩达课后编程作业】Course 4 -卷积神经网络 - 第四周作业
  10. 小明一家人,如何在30秒内过桥
  11. 主流HTML5游戏开发引擎的分析和对比
  12. 【第47题】超级楼梯加强版 | 泰波那契数列
  13. 抛光树脂制备超纯水电阻率18.25M
  14. cocos2dx lua 3.14 适配 安卓 刘海屏 全面屏 异形屏
  15. 何为数据库连接池?其工作原理是什么?
  16. DockerK8s---通过kubeadm快速部署K8s
  17. 游戏开发基础(10)
  18. 土地主大威德之模板方法模式
  19. pip 下载离线安装包及离线安装地方三库
  20. 高中信息技术教师资格证备考经验贴(非师范生)

热门文章

  1. lammps教程:velocity命令三种使用方法
  2. Android安卓小程序-随机数生成器
  3. STM32的GPS数据提取程序设计说明——基于NMEA0183协议
  4. H265H264视频流播放
  5. 音视频即时通讯解决方案
  6. CSDN账号 账号设置
  7. H5互动游戏营销方案策划
  8. 新媒体活动策划方案要点
  9. 服务器bios 虚拟化,hp服务器bios开启虚拟化(hp主板开启虚拟化)
  10. 模拟集成电路设计基础知识(二):MOS管二级效应及其小信号等效