PageSourceSearch

https://collectieoverijssel.nl/wp-content/plugins/ultimate-lightbox/assets/js/jquery.twentytwenty.js

js collectieoverijssel.nl collected 2026-10-02 07:50:41 UTC 5,463 bytes, 154 lines download raw bytes

1
2
3(function($){
4  $.fn.twentytwenty = function(options) {
5    var options = $.extend({
6      default_offset_pct: 0.5,
7      orientation: 'horizontal',
8      before_label: 'Before',
9      after_label: 'After',
10      no_overlay: false,
11      move_slider_on_hover: false,
12      move_with_handle_only: true,
13      click_to_move: false
14    }, options);
15
16    return this.each(function() {
17      var sliderPct = options.default_offset_pct;
18      var container = $(this);
19      var sliderOrientation = options.orientation;
20      var beforeDirection = (sliderOrientation === 'vertical') ? 'down' : 'left';
21      var afterDirection = (sliderOrientation === 'vertical') ? 'up' : 'right';
22
23
24      container.wrap("<div class='twentytwenty-wrapper twentytwenty-" + sliderOrientation + "'></div>");
25      if(!options.no_overlay) {
26        container.append("<div class='twentytwenty-overlay'></div>");
27      }
28      var beforeImg = container.find("img:first");
29      var afterImg = container.find("img:last");
30      container.append("<div class='twentytwenty-handle'></div>");
31      var slider = container.find(".twentytwenty-handle");
32      slider.append("<span class='twentytwenty-" + beforeDirection + "-arrow'></span>");
33      slider.append("<span class='twentytwenty-" + afterDirection + "-arrow'></span>");
34      container.addClass("twentytwenty-container");
35      beforeImg.addClass("twentytwenty-before");
36      afterImg.addClass("twentytwenty-after");
37
38      var overlay = container.find(".twentytwenty-overlay");
39      overlay.append("<div class='twentytwenty-before-label' data-content='"+options.before_label+"'></div>");
40      overlay.append("<div class='twentytwenty-after-label' data-content='"+options.after_label+"'></div>");
41
42      var calcOffset = function(dimensionPct) {
43        var w = beforeImg.width();
44       // alert("width:"+w);
45        var h = beforeImg.height();
46        // alert("height:"+h);
47        return {
48          w: w+"px",
49          h: h+"px",
50          cw: (dimensionPct*w)+"px",
51          ch: (dimensionPct*h)+"px"
52        };
53      };
54
55      var adjustContainer = function(offset) {
56      	if (sliderOrientation === 'vertical') {
57          beforeImg.css("clip", "rect(0,"+offset.w+","+offset.ch+",0)");
58          afterImg.css("clip", "rect("+offset.ch+","+offset.w+","+offset.h+",0)");
59      	}
60      	else {
61          beforeImg.css("clip", "rect(0,"+offset.cw+","+offset.h+",0)");
62          afterImg.css("clip", "rect(0,"+offset.w+","+offset.h+","+offset.cw+")");
63    	}
64        container.css("height", offset.h);
65      };
66
67      var adjustSlider = function(pct) {
68        var offset = calcOffset(pct);
69        slider.css((sliderOrientation==="vertical") ? "top" : "left", (sliderOrientation==="vertical") ? offset.ch : offset.cw);
70        adjustContainer(offset);
71      };
72
73      // Return the number specified or the min/max number if it outside the range given.
74      var minMaxNumber = function(num, min, max) {
75        return Math.max(min, Math.min(max, num));
76      };
77
78      // Calculate the slider percentage based on the position.
79      var getSliderPercentage = function(positionX, positionY) {
80        var sliderPercentage = (sliderOrientation === 'vertical') ?
81          (positionY-offsetY)/imgHeight :
82          (positionX-offsetX)/imgWidth;
83
84        return minMaxNumber(sliderPercentage, 0, 1);
85      };
86
87
88      $(window).on("resize.twentytwenty", function(e) {
89        adjustSlider(sliderPct);
90      });
91
92      var offsetX = 0;
93      var offsetY = 0;
94      var imgWidth = 0;
95      var imgHeight = 0;
96      var onMoveStart = function(e) {
97        if (((e.distX > e.distY && e.distX < -e.distY) || (e.distX < e.distY && e.distX > -e.distY)) && sliderOrientation !== 'vertical') {
98          e.preventDefault();
99        }
100        else if (((e.distX < e.distY && e.distX < -e.distY) || (e.distX > e.distY && e.distX > -e.distY)) && sliderOrientation === 'vertical') {
101          e.preventDefault();
102        }
103        container.addClass("active");
104        offsetX = container.offset().left;
105        offsetY = container.offset().top;
106        imgWidth = beforeImg.width(); 
107        imgHeight = beforeImg.height();          
108      };
109      var onMove = function(e) {
110        if (container.hasClass("active")) {
111          sliderPct = getSliderPercentage(e.pageX, e.pageY);
112          adjustSlider(sliderPct);
113        }
114      };
115      var onMoveEnd = function() {
116          container.removeClass("active");
117      };
118
119      var moveTarget = options.move_with_handle_only ? slider : container;
120      moveTarget.on("movestart",onMoveStart);
121      moveTarget.on("move",onMove);
122      moveTarget.on("moveend",onMoveEnd);
123
124      if (options.move_slider_on_hover) {
125        container.on("mouseenter", onMoveStart);
126        container.on("mousemove", onMove);
127        container.on("mouseleave", onMoveEnd);
128      }
129
130      slider.on("touchmove", function(e) {
131        e.preventDefault();
132      });
133
134      container.find("img").on("mousedown", function(event) {
135        event.preventDefault();
136      });
137
138      if (options.click_to_move) {
139        container.on('click', function(e) {
140          offsetX = container.offset().left;
141          offsetY = container.offset().top;
142          imgWidth = beforeImg.width();
143          imgHeight = beforeImg.height();
144
145          sliderPct = getSliderPercentage(e.pageX, e.pageY);
146          adjustSlider(sliderPct);
147        });
148      }
149
150      $(window).trigger("resize.twentytwenty");
151    });
152  };
153
154})(jQuery);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.