PageSourceSearch

http://sumoing.com/js/jquery.twentytwenty.js

js sumoing.com collected 2026-09-25 02:40:20 UTC 3,721 bytes, 103 lines download raw bytes

1(function($){
2
3  $.fn.twentytwenty = function(options) {
4    var options = $.extend({default_offset_pct: 0.5, orientation: 'horizontal'}, options);
5    return this.each(function() {
6
7      var sliderPct = options.default_offset_pct;
8      var container = $(this);
9      var sliderOrientation = options.orientation;
10      var beforeDirection = (sliderOrientation === 'vertical') ? 'down' : 'left';
11      var afterDirection = (sliderOrientation === 'vertical') ? 'up' : 'right';
12      
13      
14      container.wrap("<div class='twentytwenty-wrapper twentytwenty-" + sliderOrientation + "'></div>");
15      container.append("<div class='twentytwenty-overlay'></div>");
16      var beforeImg = container.find("img:first");
17      var afterImg = container.find("img:last");
18      container.append("<div class='twentytwenty-handle'></div>");
19      var slider = container.find(".twentytwenty-handle");
20      slider.append("<span class='twentytwenty-" + beforeDirection + "-arrow'></span>");
21      slider.append("<span class='twentytwenty-" + afterDirection + "-arrow'></span>");
22      container.addClass("twentytwenty-container");
23      beforeImg.addClass("twentytwenty-before");
24      afterImg.addClass("twentytwenty-after");
25      
26      var overlay = container.find(".twentytwenty-overlay");
27      overlay.append("<div class='twentytwenty-before-label'></div>");
28      overlay.append("<div class='twentytwenty-after-label'></div>");
29
30      var calcOffset = function(dimensionPct) {
31        var w = beforeImg.width();
32        var h = beforeImg.height();
33        return {
34          w: w+"px",
35          h: h+"px",
36          cw: (dimensionPct*w)+"px",
37          ch: (dimensionPct*h)+"px"
38        };
39      };
40
41      var adjustContainer = function(offset) {
42      	if (sliderOrientation === 'vertical') {
43      	  beforeImg.css("clip", "rect(0,"+offset.w+","+offset.ch+",0)");
44      	}
45      	else {
46          beforeImg.css("clip", "rect(0,"+offset.cw+","+offset.h+",0)");
47    	}
48        container.css("height", offset.h);
49      };
50
51      var adjustSlider = function(pct) {
52        var offset = calcOffset(pct);
53        slider.css((sliderOrientation==="vertical") ? "top" : "left", (sliderOrientation==="vertical") ? offset.ch : offset.cw);
54        adjustContainer(offset);
55      }
56
57      $(window).on("resize.twentytwenty", function(e) {
58        adjustSlider(sliderPct);
59      });
60
61      var offsetX = 0;
62      var imgWidth = 0;
63      
64      slider.on("movestart", function(e) {
65        if (((e.distX > e.distY && e.distX < -e.distY) || (e.distX < e.distY && e.distX > -e.distY)) && sliderOrientation !== 'vertical') {
66          e.preventDefault();
67        }
68        else if (((e.distX < e.distY && e.distX < -e.distY) || (e.distX > e.distY && e.distX > -e.distY)) && sliderOrientation === 'vertical') {
69          e.preventDefault();
70        }
71        container.addClass("active");
72        offsetX = container.offset().left;
73        offsetY = container.offset().top;
74        imgWidth = beforeImg.width(); 
75        imgHeight = beforeImg.height();          
76      });
77
78      slider.on("moveend", function(e) {
79        container.removeClass("active");
80      });
81
82      slider.on("move", function(e) {
83        if (container.hasClass("active")) {
84          sliderPct = (sliderOrientation === 'vertical') ? (e.pageY-offsetY)/imgHeight : (e.pageX-offsetX)/imgWidth;
85          if (sliderPct < 0) {
86            sliderPct = 0;
87          }
88          if (sliderPct > 1) {
89            sliderPct = 1;
90          }
91          adjustSlider(sliderPct);
92        }
93      });
94
95      container.find("img").on("mousedown", function(event) {
96        event.preventDefault();
97      });
98
99      $(window).trigger("resize.twentytwenty");
100    });
101  };
102
103})(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.