div内容专用的下一个/上一个画廊

如何解决div内容专用的下一个/上一个画廊

| 我是JQUERY的完全菜鸟,正在慢慢学习。但是我已经下载了一个现有的全屏jquery画廊,尽管它对于单个div来说效果很好,但是如果我想让多个div用不同的拇指,则画廊会中断(下一个/上一个会跟踪所有div中称为“内容”的所有项目) )。 这是jQuery代码:
// SLIDE PANEL GALLERY

 $(function() {
            /* this is the index of the last clicked picture */
            var current = -1;
            /* number of pictures */
            var totalpictures = $(\'.content img\').size();
            /* speed to animate the panel and the thumbs wrapper */
            var speed   = 500;

            /* show the content */
            $(\'.content\').show();

            /*
            when the user resizes the browser window,the size of the picture being viewed is recalculated;
             */
            $(window).bind(\'resize\',function() {
                var $picture = $(\'#wrapper\').find(\'img\');
                resize($picture);
            });

            /*
            when hovering a thumb,animate it\'s opacity
            for a cool effect;
            when clicking on it,we load the corresponding large image;
            the source of the large image is stored as 
            the \"alt\" attribute of the thumb image
             */


            $(\'.content > img\').hover(function () {
                var $this   = $(this);
                $this.stop().animate({\'opacity\':\'1.0\'},200);
            },function () {
                var $this   = $(this);
                $this.stop().animate({\'opacity\':\'0.4\'},200);
            }).bind(\'click\',function(){
                var $this   = $(this);

                /* shows the loading icon */
                $(\'#loading\').show();

                $(\'<img/>\').load(function(){
                    $(\'#loading\').hide();

                    if($(\'#wrapper\').find(\'img\').length) return;
                    current     = $this.index();
                    var $theImage   = $(this);
                    /*
                    After it\'s loaded we hide the loading icon
                    and resize the image,given the window size;
                    then we append the image to the wrapper
                    */

                    resize($theImage);

                    $(\'#wrapper\').append($theImage);
                    /* make its opacity animate */
                    $theImage.fadeIn(800);

                    /* and finally slide up the panel */
                    $(\'#panel\').animate({\'height\':\'100%\'},speed,function(){
                        /*
                        if the picture has a description,it\'s stored in the title attribute of the thumb;
                        show it if it\'s not empty
                         */
                        var title = $this.attr(\'title\');

                        if(title != \'\') 
                            $(\'#description\').html(title).show();
                        else 
                            $(\'#description\').empty().hide();


                        /*
                        if our picture is the first one,don\'t show the \"previous button\"
                        for the slideshow navigation;
                        if our picture is the last one,don\'t show the \"next button\"
                        for the slideshow navigation
                         */
                        if(current==0)
                            $(\'#prev\').hide();
                        else
                            $(\'#prev\').fadeIn();
                        if(current==parseInt(totalpictures-1))
                            $(\'#next\').hide();
                        else
                            $(\'#next\').fadeIn();
                        /*
                        we set the z-index and height of the thumbs wrapper 
                        to 0,because we want to slide it up afterwards,when the user clicks the large image
                         */
                        $(\'#thumbsWrapper\').css({\'z-index\':\'0\',\'height\':\'0px\'});
                    });
                }).attr(\'src\',$this.attr(\'alt\'));
            });

            /*
            when hovering a large image,we want to slide up the thumbs wrapper again,and reset the panel (like it was initially);
            this includes removing the large image element
             */
            $(\'#wrapper > img\').live(\'click\',function(){
                $this = $(this);
                $(\'#description\').empty().hide();

                $(\'#thumbsWrapper\').css(\'z-index\',\'10\')
                .stop()
                .animate({\'height\':\'100%\'},function(){
                    var $theWrapper = $(this);
                    $(\'#panel\').css(\'height\',\'0px\');
                    $theWrapper.css(\'z-index\',\'0\');
                    /* 
                    remove the large image element
                    and the navigation buttons
                     */
                    $this.remove();
                    $(\'#prev\').hide();
                    $(\'#next\').hide();
                });
            });

            /*
            when we are viewing a large image,if we navigate to the right/left we need to know
            which image is the corresponding neighbour.
            we know the index of the current picture (current),so we can easily get to the neighbour:
             */
            $(\'#next\').bind(\'click\',function(){
                var $this           = $(this);
                var $nextimage      = $(\'.content img:nth-child(\'+parseInt(current+2)+\')\');
                navigate($nextimage,\'right\');
            });
            $(\'#prev\').bind(\'click\',function(){
                var $this           = $(this);
                var $previmage      = $(\'.content img:nth-child(\'+parseInt(current)+\')\');
                navigate($previmage,\'left\');
            });

            /*
            given the next or previous image to show,and the direction,it loads a new image in the panel.
             */
            function navigate($nextimage,dir){
                /*
                if we are at the end/beginning
                then there\'s no next/previous
                 */
                if(dir==\'left\' && current==0)
                    return;
                if(dir==\'right\' && current==parseInt(totalpictures-1))
                    return;
                $(\'#loading\').show();
                $(\'<img/>\').load(function(){
                    var $theImage = $(this);
                    $(\'#loading\').hide();
                    $(\'#description\').empty().fadeOut();

                    $(\'#wrapper img\').stop().fadeOut(500,function(){
                        var $this = $(this);

                        $this.remove();
                        resize($theImage);

                        $(\'#wrapper\').append($theImage.show());
                        $theImage.stop().fadeIn(800);

                        var title = $nextimage.attr(\'title\');
                        if(title != \'\'){
                            $(\'#description\').html(title).show();
                        }
                        else
                            $(\'#description\').empty().hide();

                        if(current==0)
                            $(\'#prev\').hide();
                        else
                            $(\'#prev\').show();
                        if(current==parseInt(totalpictures-1))
                            $(\'#next\').hide();
                        else
                            $(\'#next\').show();
                    });
                    /*
                    increase or decrease the current variable
                     */
                    if(dir==\'right\')
                        ++current;
                    else if(dir==\'left\')
                        --current;
                }).attr(\'src\',$nextimage.attr(\'alt\'));
            }

            /*
            resizes an image given the window size,considering the margin values
             */
            function resize($image){
                var windowH      = $(window).height()-150;
                var windowW      = $(window).width()-80;
                var theImage     = new Image();
                theImage.src     = $image.attr(\"src\");
                var imgwidth     = theImage.width;
                var imgheight    = theImage.height;

                if((imgwidth > windowW)||(imgheight > windowH)){
                    if(imgwidth > imgheight){
                        var newwidth = windowW;
                        var ratio = imgwidth / windowW;
                        var newheight = imgheight / ratio;
                        theImage.height = newheight;
                        theImage.width= newwidth;
                        if(newheight>windowH){
                            var newnewheight = windowH;
                            var newratio = newheight/windowH;
                            var newnewwidth =newwidth/newratio;
                            theImage.width = newnewwidth;
                            theImage.height= newnewheight;
                        }
                    }
                    else{
                        var newheight = windowH;
                        var ratio = imgheight / windowH;
                        var newwidth = imgwidth / ratio;
                        theImage.height = newheight;
                        theImage.width= newwidth;
                        if(newwidth>windowW){
                            var newnewwidth = windowW;
                            var newratio = newwidth/windowW;
                            var newnewheight =newheight/newratio;
                            theImage.height = newnewheight;
                            theImage.width= newnewwidth;
                        }
                    }
                }
                $image.css({\'width\':theImage.width+\'px\',\'height\':theImage.height+\'px\'});
            }
        });
如何修改代码以允许我具有多个内容div,而next / prev仅对应于该内容div(父div?),而不与页面上的其他内容相对应? 如果有人可以提供帮助,将不胜感激。很高兴提供css / html。     

解决方法

编辑:我希望这一工作! http://jsbin.com/uwafi6/5 我已经为您完成了操作,这里:http://jsbin.com/uwafi6/4 将第一行更改为:
jQuery.fn.createGallery = function() {
您必须将#next和#prev的所有实例更改为类.next和.prev 您还需要在开始附近添加
var gallery = this;
,以便使用:
gallery.find(\'.next\')
gallery.find(\'.prev\')
哪里有
$(\'#next\')
$(\'#prev\')
您需要使用相同的方法将其他任何ID更改为类。 然后,您可以使用
$(\'#myFirstGallery\').createGallery();
创建图库的实例。 您可以在此处找到更多信息:http://docs.jquery.com/Tutorials:Getting_Started_with_jQuery#Plug_me:_Writing_your_own_plugins     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-