实现图片滑块滚动条效果

jQuery UI 插件中的滑动条(Slider)工具集实现图片滑块滚动条的效果

初始效果:

初始代码:html

 1 <body>
 2 
 3 <div class="scroll-pane ui-widget ui-widget-header ui-corner-all">
 4     <div class="scroll-content">                                                <!--图片内容-->
 5         <div class="scroll-content-item ui-widget-header">1</div>
 6         <div class="scroll-content-item ui-widget-header">2</div>
 7         <div class="scroll-content-item ui-widget-header">3</div>
 8         <div class="scroll-content-item ui-widget-header">4</div>
 9         <div class="scroll-content-item ui-widget-header">5</div>
10         <div class="scroll-content-item ui-widget-header">6</div>
11         <div class="scroll-content-item ui-widget-header">7</div>
12         <div class="scroll-content-item ui-widget-header">8</div>
13         <div class="scroll-content-item ui-widget-header">9</div>
14         <div class="scroll-content-item ui-widget-header">10</div>
15         <div class="scroll-content-item ui-widget-header">11</div>
16         <div class="scroll-content-item ui-widget-header">12</div>
17         <div class="scroll-content-item ui-widget-header">13</div>
18         <div class="scroll-content-item ui-widget-header">14</div>
19         <div class="scroll-content-item ui-widget-header">15</div>
20         <div class="scroll-content-item ui-widget-header">16</div>
21         <div class="scroll-content-item ui-widget-header">17</div>
22         <div class="scroll-content-item ui-widget-header">18</div>
23         <div class="scroll-content-item ui-widget-header">19</div>
24         <div class="scroll-content-item ui-widget-header">20</div>
25     </div>
26     <div class="scroll-bar-wrap ui-widget-content ui-corner-bottom">              <!--滚动条对象-->
27         <div class="scroll-bar"></div>
28     </div>
29 </div>
30 </body>

css:

 1 <style>
 2         
 3         
 4      body {
 5         font-size: 62.5%;
 6         font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif";
 7       }  
 8 
 9      table {
10       font-size: 1em;
11       }
12 
13     .demo-description {
14     clear: both;
15     padding: 12px;
16     font-size: 1.3em;
17     line-height: 1.4em;
18      }
19 
20    .ui-draggable, .ui-droppable {
21       background-position: top;
22    }
23     .scroll-pane { 
24     overflow: auto; 
25     width: 99%; 
26     float:left; 
27     }
28     .scroll-content {
29      width: 2440px; 
30     float: left; 
31     }
32     .scroll-content-item { 
33         width: 100px; 
34         height: 100px;
35          float: left; 
36          margin: 10px; font-size: 
37          3em;
38           line-height: 96px;
39            text-align: center; 
40            }
41     .scroll-bar-wrap { 
42         clear: left; 
43         padding: 0 4px 0 2px; 
44         margin: 0 -1px -1px -1px; 
45         }
46     .scroll-bar-wrap .ui-slider {
47          background: none; 
48          border:0; 
49          height: 2em; 
50          margin: 0 auto; 
51           }
52     .scroll-bar-wrap .ui-handle-helper-parent { 
53         position: relative; 
54         width: 100%; 
55         height: 100%; 
56         margin: 0 auto;
57          }
58     .scroll-bar-wrap .ui-slider-handle { 
59         top:.2em; 
60         height: 1.5em; 
61         }
62     .scroll-bar-wrap .ui-slider-handle .ui-icon {
63          margin: -8px auto 0; 
64          position: relative; 
65          top: 50%; 
66          }
67     </style>
css

通过移动滑块向右移动的效果:

 1 <script>
 2     $(function() {
 3         //获取图片内容对象和包含图片内容和滑动条对象的div对象
 4         var scrollPane = $( ".scroll-pane" ),
 5         scrollContent = $( ".scroll-content" );
 6 
 7         //获取滑动条对象并进行相应的设置
 8         var scrollbar = $( ".scroll-bar" ).slider({
 9             //设置发生滑动滑动柄事件时的触发事件
10             slide: function( event, ui ) {
11                 if ( scrollContent.width() > scrollPane.width() ) {
12                     scrollContent.css( "margin-left", Math.round(
13                         ui.value / 100 * ( scrollPane.width() - scrollContent.width() )
14                     ) + "px" );
15                 } else {
16                     scrollContent.css( "margin-left", 0 );
17                 }
18             }
19         });
20 
21         //改变图片的处理
22         var handleHelper = scrollbar.find( ".ui-slider-handle" )
23         .mousedown(function() {
24             scrollbar.width( handleHelper.width() );
25         })
26         .mouseup(function() {
27             scrollbar.width( "100%" );
28         })
29         .append( "<span class='ui-icon ui-icon-grip-dotted-vertical'></span>" )
30         .wrap( "<div class='ui-handle-helper-parent'></div>" ).parent();
31 
32         //设置超出的图片处于隐藏状态
33         scrollPane.css( "overflow", "hidden" );
34 
35         //设置滚动条滚动距离的大小和处理的比例
36         function sizeScrollbar() {
37             var remainder = scrollContent.width() - scrollPane.width();
38             var proportion = remainder / scrollContent.width();
39             var handleSize = scrollPane.width() - ( proportion * scrollPane.width() );
40             scrollbar.find( ".ui-slider-handle" ).css({
41                  handleSize,
42                 "margin-left": -handleSize / 2
43             });
44             handleHelper.width( "" ).width( scrollbar.width() - handleSize );
45         }
46 
47         //获取滚动内容图片位置而设置整滑动柄的值
48         function resetValue() {
49             var remainder = scrollPane.width() - scrollContent.width();
50             var leftVal = scrollContent.css( "margin-left" ) === "auto" ? 0 :
51                 parseInt( scrollContent.css( "margin-left" ) );
52             var percentage = Math.round( leftVal / remainder * 100 );
53             scrollbar.slider( "value", percentage );
54         }
55 
56         //根据窗口大小设置显示图片内容
57         function reflowContent() {
58                 var showing = scrollContent.width() + parseInt( scrollContent.css( "margin-left" ), 10 );
59                 var gap = scrollPane.width() - showing;
60                 if ( gap > 0 ) {
61                     scrollContent.css( "margin-left", parseInt( scrollContent.css( "margin-left" ), 10 ) + gap );
62                 }
63         }
64 
65         //根据窗口大小调整滑动柄上的位置
66         $( window ).resize(function() {
67             resetValue();
68             sizeScrollbar();
69             reflowContent();
70         });
71         
72         setTimeout( sizeScrollbar, 10 );//0.1秒后执行方法sizeScrollbar
73     });
74     </script>

 总的代码:

  1 <!doctype html>
  2 <html lang="en">
  3 <head>
  4     <meta charset="utf-8">
  5     <title>图片滑块滚动条</title>
  6     
  7     <script src="js/jquery-3.2.1.js"></script>
  8     <script src="js/jquery-ui.js"></script>
  9        <link href="js/jquery-ui.css" rel="stylesheet">
 10     
 11     <style>
 12         
 13         
 14      body {
 15         font-size: 62.5%;
 16         font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif";
 17       }  
 18 
 19      table {
 20       font-size: 1em;
 21       }
 22 
 23     .demo-description {
 24     clear: both;
 25     padding: 12px;
 26     font-size: 1.3em;
 27     line-height: 1.4em;
 28      }
 29 
 30    .ui-draggable, .ui-droppable {
 31       background-position: top;
 32    }
 33     .scroll-pane { 
 34     overflow: auto; 
 35     width: 99%; 
 36     float:left; 
 37     }
 38     .scroll-content {
 39      width: 2440px; 
 40     float: left; 
 41     }
 42     .scroll-content-item { 
 43         width: 100px; 
 44         height: 100px;
 45          float: left; 
 46          margin: 10px; font-size: 
 47          3em;
 48           line-height: 96px;
 49            text-align: center; 
 50            }
 51     .scroll-bar-wrap { 
 52         clear: left; 
 53         padding: 0 4px 0 2px; 
 54         margin: 0 -1px -1px -1px; 
 55         }
 56     .scroll-bar-wrap .ui-slider {
 57          background: none; 
 58          border:0; 
 59          height: 2em; 
 60          margin: 0 auto; 
 61           }
 62     .scroll-bar-wrap .ui-handle-helper-parent { 
 63         position: relative; 
 64         width: 100%; 
 65         height: 100%; 
 66         margin: 0 auto;
 67          }
 68     .scroll-bar-wrap .ui-slider-handle { 
 69         top:.2em; 
 70         height: 1.5em; 
 71         }
 72     .scroll-bar-wrap .ui-slider-handle .ui-icon {
 73          margin: -8px auto 0; 
 74          position: relative; 
 75          top: 50%; 
 76          }
 77     </style>
 78     <script>
 79     $(function() {
 80         //获取图片内容对象和包含图片内容和滑动条对象的div对象
 81         var scrollPane = $( ".scroll-pane" ),
 82         scrollContent = $( ".scroll-content" );
 83 
 84         //获取滑动条对象并进行相应的设置
 85         var scrollbar = $( ".scroll-bar" ).slider({
 86             //设置发生滑动滑动柄事件时的触发事件
 87             slide: function( event, ui ) {
 88                 if ( scrollContent.width() > scrollPane.width() ) {
 89                     scrollContent.css( "margin-left", Math.round(
 90                         ui.value / 100 * ( scrollPane.width() - scrollContent.width() )
 91                     ) + "px" );
 92                 } else {
 93                     scrollContent.css( "margin-left", 0 );
 94                 }
 95             }
 96         });
 97 
 98         //改变图片的处理
 99         var handleHelper = scrollbar.find( ".ui-slider-handle" )
100         .mousedown(function() {
101             scrollbar.width( handleHelper.width() );
102         })
103         .mouseup(function() {
104             scrollbar.width( "100%" );
105         })
106         .append( "<span class='ui-icon ui-icon-grip-dotted-vertical'></span>" )
107         .wrap( "<div class='ui-handle-helper-parent'></div>" ).parent();
108 
109         //设置超出的图片处于隐藏状态
110         scrollPane.css( "overflow", "hidden" );
111 
112         //设置滚动条滚动距离的大小和处理的比例
113         function sizeScrollbar() {
114             var remainder = scrollContent.width() - scrollPane.width();
115             var proportion = remainder / scrollContent.width();
116             var handleSize = scrollPane.width() - ( proportion * scrollPane.width() );
117             scrollbar.find( ".ui-slider-handle" ).css({
118                  handleSize,
119                 "margin-left": -handleSize / 2
120             });
121             handleHelper.width( "" ).width( scrollbar.width() - handleSize );
122         }
123 
124         //获取滚动内容图片位置而设置整滑动柄的值
125         function resetValue() {
126             var remainder = scrollPane.width() - scrollContent.width();
127             var leftVal = scrollContent.css( "margin-left" ) === "auto" ? 0 :
128                 parseInt( scrollContent.css( "margin-left" ) );
129             var percentage = Math.round( leftVal / remainder * 100 );
130             scrollbar.slider( "value", percentage );
131         }
132 
133         //根据窗口大小设置显示图片内容
134         function reflowContent() {
135                 var showing = scrollContent.width() + parseInt( scrollContent.css( "margin-left" ), 10 );
136                 var gap = scrollPane.width() - showing;
137                 if ( gap > 0 ) {
138                     scrollContent.css( "margin-left", parseInt( scrollContent.css( "margin-left" ), 10 ) + gap );
139                 }
140         }
141 
142         //根据窗口大小调整滑动柄上的位置
143         $( window ).resize(function() {
144             resetValue();
145             sizeScrollbar();
146             reflowContent();
147         });
148         
149         setTimeout( sizeScrollbar, 10 );//0.1秒后执行方法sizeScrollbar
150     });
151     </script>
152 </head>
153 <body>
154 
155 <div class="scroll-pane ui-widget ui-widget-header ui-corner-all">
156     <div class="scroll-content">                                                <!--图片内容-->
157         <div class="scroll-content-item ui-widget-header">1</div>
158         <div class="scroll-content-item ui-widget-header">2</div>
159         <div class="scroll-content-item ui-widget-header">3</div>
160         <div class="scroll-content-item ui-widget-header">4</div>
161         <div class="scroll-content-item ui-widget-header">5</div>
162         <div class="scroll-content-item ui-widget-header">6</div>
163         <div class="scroll-content-item ui-widget-header">7</div>
164         <div class="scroll-content-item ui-widget-header">8</div>
165         <div class="scroll-content-item ui-widget-header">9</div>
166         <div class="scroll-content-item ui-widget-header">10</div>
167         <div class="scroll-content-item ui-widget-header">11</div>
168         <div class="scroll-content-item ui-widget-header">12</div>
169         <div class="scroll-content-item ui-widget-header">13</div>
170         <div class="scroll-content-item ui-widget-header">14</div>
171         <div class="scroll-content-item ui-widget-header">15</div>
172         <div class="scroll-content-item ui-widget-header">16</div>
173         <div class="scroll-content-item ui-widget-header">17</div>
174         <div class="scroll-content-item ui-widget-header">18</div>
175         <div class="scroll-content-item ui-widget-header">19</div>
176         <div class="scroll-content-item ui-widget-header">20</div>
177     </div>
178     <div class="scroll-bar-wrap ui-widget-content ui-corner-bottom">              <!--滚动条对象-->
179         <div class="scroll-bar"></div>
180     </div>
181 </div>
182 </body>
183 </html>
总代码
原文地址:https://www.cnblogs.com/jiguiyan/p/10663384.html