GithubHelp home page GithubHelp logo

ruisoftware / jquery-rssliderlens Goto Github PK

View Code? Open in Web Editor NEW
22.0 3.0 5.0 794 KB

UI slider control that magnifies the current value

License: MIT License

JavaScript 75.36% CSS 6.24% HTML 14.41% Less 4.00%
range jquery slide javascript input magnifying-glass control

jquery-rssliderlens's Introduction

jquery-rsSliderLens Build Status

Renders a powerfull input range control.

With minor differences, all browsers render an <input type="range" /> pretty much the same way:
default

Using this plugin, the same markup is rendered by default as:
sample1

or pretty much any style your imagination takes you:
sample2

Check out a demo. Also available at src/demo/demo.html

Key Features

  • Works for any markup. Although semantically the <input type="range" /> is the most appropriate markup, any other element can be used.
  • Keyboard and mouse navigation. For a markup other than <input type="range" /> to be focusable, it has to have a tabindex attribute;
  • Two types of slider:
    • Sliding type: The handle can move along the slide rail;
    • Fixed type: The handle remains in a fixed position, while the slide rail moves underneath;
  • When using the sliding type, two handles can be utilized to select ranges;
  • If desired, it can display magnified content inside the handle(s);
  • Supports both horizontal and vertical orientations;
  • Supports left to right and top to bottom directions. These directions can be reversed;
  • Either renders a rule or the markup's original content;
  • Highly customizable:
    • LESS file used to generate CSS in the color layout you wish;
    • Responsive design, through the use of relative CSS units;
    • Strong event driven support;
    • Slider content can be overridden or rewritten from scratch;
  • Fast loading. No images used whatsoever;
  • Supports desktop and mobile events.

Installation

You can install from npm:

npm install jquery.rsSliderLens --save

or directly from git:

<script src="http://rawgit.com/ruisoftware/jquery-rsSliderLens/master/src/jquery.rsSliderLens.js"></script>

or you can download the Zip archive from github, clone or fork this repository and include jquery.rsSliderLens.js from your local machine.

You also need to download jQuery. In the example below, jQuery is downloaded from Google cdn.

Usage

First, you must run grunt. Grunt among other tasks, compiles LESS file into CSS, minimizes the js file and places all production files inside a new dist folder.

Create the following file in the src folder (or you can try it live here).

<!DOCTYPE html>
<html>
<head>
    <link rel="stylesheet" href="../dist/rsSliderLens.css" />
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
    <script src="../dist/jquery.rsSliderLens.min.js"></script>
    <style>
        section {
            margin: 1em 3em;
        }
        p {
            margin-top: 3em;
            color: #eee;
        }
    </style>
</head>
<body>
    <section>
        <p>Ruler slider</p>
        <input type="range">

        <p>Fixed ruler slider ranging from -100 to 100 with a step of 5</p>
        <input type="range" min="-100" max="100" step="5">

        <p>Content slider</p>
        <span>This is the original HTML content</span>
    </section>

    <script>
        $("input[type=range]").eq(0).rsSliderLens();

        $("input[type=range]").eq(1).rsSliderLens({
            paddingStart: .1,
            paddingEnd: .1,
            fixedHandle: true,
            ruler: {
                size: 6 // 600% of the slider width
            }
        });

        $("span").rsSliderLens({
            ruler: {
                visible: false // hide the ruler, show the html content
            }
        });
    </script>
</body>
</html>

License

This project is licensed under the terms of the MIT license

Bug Reports & Feature Requests

Please use the issue tracker to report any bugs or file feature requests.

Contributing

Please refer to the Contribution page from more information.

jquery-rssliderlens's People

Contributors

ruisoftware avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

jquery-rssliderlens's Issues

Programatically update ruler values

Jose Rui Santos

Please, trying to update ruler values array.

lista = [0,1,2,3,4,5,6,7,8)

  • $(".myClass").rsSliderLens('option','ruler["labels"]["values"]',lista ) => not working
  • $(".myClass").rsSliderLens('option','ruler.labels.values',lista ) => not working
  • $(".myClass").rsSliderLens('option','ruler', {labels: {values:lista}} ) => not working
  • $(".myClass").rsSliderLens('option','ruler.labels', { values: lista }) => not working
  • $(".myClass").rsSliderLens('option','ruler','labels', { values: lista }) => not working
  • $(".myClass").rsSliderLens('option','ruler',{labels: { values: lista }})=> not working
  • $(".myClass").rsSliderLens('option',{ruler: {labels: { values: lista }}})=> not working

How can i code the rigth way?

Changing the range fails

Trying to change the current range properties,
$yourPlugin.rsSliderLens('option', 'range', { type: [ -20, 55 ], draggable: true })
does nothing, as a new range does not become visible.
After this, any mouse events causes further exceptions to be thrown.

Issues with BIG numbers such as UNIX Timestamps

There is an issue when using min and max values exceeding a certain amount of cyphers.

  1. Starting around value 1000000 the dragging becomes unusable, totally slow, "delayed". I assume there are too many steps to "process" when we go by step 1.

  2. While above could however be workarounded, the next related issue is showstopping. Example, min: 10, max:100000000 will throw an error and break the plugin:

jquery.rsSliderLens.js:1210 Uncaught RangeError: Invalid string length
    at t (jquery.rsSliderLens.js:1210)
    at jquery.rsSliderLens.js:1241
    at Object.renderSvg (jquery.rsSliderLens.js:1250)
    at Object.initSvgOutsideHandle (jquery.rsSliderLens.js:26)
    at Object.initSvgHandle (jquery.rsSliderLens.js:290)
    at Object.init (jquery.rsSliderLens.js:305)
    at new a (jquery.rsSliderLens.js:1715)
    at HTMLInputElement.<anonymous> (jquery.rsSliderLens.js:1857)
    at Function.each (jquery.min.js?ver=3.5.1:2)
    at s.fn.init.each (jquery.min.js?ver=3.5.1:2)

Again, it is obvious we cannot print out one million labels and steps on the slider, but these high numbers are nothing when we work with UNIX Timestamp, for which I intended to use your very nice JS Slider Plugin.

I want to produce a "Date" Slider where we can select a minimum and maximum date within a range of dates spanning from 1.1.2016 to 1.1.2021
That is already enough to break the plugin as it means to pass timestamp in seconds as so:

var start = 946684800001;
var end   = Date.now();`

This breaks the plugin with above error message.
Even if we would divide above UNIX to make the number smaller, the amount of cyphers in the string is too much, and the plugin fails.

Is there any suggestion to create such Date Sliders with your plugin?
Perhaps I miss something obvious.

For reference, this is a sample code to replicate the issue:

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/test/sliderLens.min.css">
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.rsSliderLens.min.js"></script>
<input type="range" id="full-custom-range">
<style>
body {
    background-color: unset !important;
}
</style>
<script>
var start = 946684800001;//begin 2016
var end   = Date.now();//today
jQuery("#full-custom-range").rsSliderLens({
	width: 369,
        min: start,
        max: end,
        value: [start, end],
		step: 2419200,//approximately one month in UNIX
		paddingStart: 0.1,
        paddingEnd: 0.1
});
</script>

Bug when pragmatically updating value for single sliders

There is a bug in the code when setting the sliders value via JavaScript.

The problem appears to be on line 662, changing it as below solves the problem. Note the same bug may be on line 513, I have not tested this. Sorry for not creating a pull request I was having trouble doing so.

  •                                panUtil.gotoAnim(info.currValue[0], info.getCurrValue(value), opts.handle.animation, opts.keyboard.easing);
    
  •                                panUtil.gotoAnim(info.currValue[0], info.getCurrValue(value), opts.handle.animation, opts.keyboard.easing, elemHandle.$elem1st);
                               }
    

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.